赞
踩
数组中只有一个数只出现了奇数次,找到这个数并打印。
解法一
def find_only_odd_num(arr):
temp = {i: 0 for i in arr}
for i in arr:
temp[i] += 1
for key, val in temp.items():
if val == 1:
return key
return -1
解法二
- 利用栈的特性,在里面就删除,不在里面,就是入栈,栈中最后剩下的就是。
def find_only_odd_num_01(arr):
stack = []
for i in arr:
if i not in stack:
stack.append(i)
else:
stack.remove(i)
return stack[-1]
解法三
- 利用异或运算的特性,N= N^0,0=N^N,经过一轮异或之后剩下的一定是只出现奇数次的数
def find_only_num(arr):
if not arr:
return -1
elif len(arr) == 1:
return arr[0]
else:
eor = 0
for i in arr:
eor = eor ^ i
return eor
java code
public static void printOddTimesNum(int[] arr){
int eor = 0;
for (int i = 0; i < arr.length; i++) {
eor = eor ^ arr[i]; // 0 ^ N = N
}
System.out.println(eor);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。