Description:
Given an array, find the int that appears an odd number of times.There will always be only one integer that appears an odd number of times.
解法一
一般的解法,笨拙的方法,使用Map的性质,先遍历每一个元素,将元素作为key,value为它出现的次数,然后再使用Entry的方式遍历,求得value为奇数的entry的key,这个key就是需要的值
但是也不知道怎么实现
解法二
巧解(我还需要继续学习提升自己的姿势水平).方法利用了异或的性质(相同的数字异或结果为0, a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;).所以将集合中所有中数字进行异或就可以了,所有的成对的元素异或的结果为0,只剩下最后一个出现次数为奇数的元素.
代码如下:
public class FindOdd {
public static int findIt(int[] A) {
int xor = 0;
for (int i = 0; i < A.length; i++) {
xor ^= A[i];
}
return xor;
}
}
解法三
错误的解法
def find_it(seq):
for i in seq:
if seq.count(i) % 2 != 0:
return 1
解法四
看不懂
function findOdd(A) {
//happy coding!
let indecies = [];
A.forEach(a => {
let idx = A.indexOf(a);
let index = [];
while (idx !== -1) {
index.push(idx);
idx = A.indexOf(a, idx + 1);
}
indecies.push(index);
});
const a = indecies.filter(index => (index.length % 2 !== 0));
return A[a[0][0]];
}
解法五
function findOdd(A) {
//happy coding!
return A.reduce((a, b) => a^b);
}
解法六
错误啊 i是元素吧 计数器隐藏
def find_it(seq):
xor = 0
for i in seq:
xor ^= seq[i]
return xor
IndexError: list index out of range的错误原因
第1种可能情况
list[index]index超出范围,也就是常说的数组越界
第2种可能情况
list是一个空的 没有一个元素
进行list[0]就会出现该错误,这在爬虫问题中很常见,比如有个列表爬去下来为空,统一处理就会报错
for循环很多时候用来遍历,一般都会由界限,例如便利一个列表时,需要获取列表的长度,则len函数可以达到此效果,然后配合for循环和range函数就可以成功便利
a = [1,2,3,4]
for i in range(len(a)):
print(a[i])
#亦可写成下面的形式
#for i in a:
print(i)
for 表达式1 in 表达式2: # 判断 表达式1 是否在表达式2所包含范围中
语句1 # 若上一句条件成立,则执行下列语句
变量:往前找到首个出现的地方
控制权(临时)转移给函数 执行直到return 或f的结束大括号 控制权返回到调用处
写函数原型时不能写形参列表 错误???可以就一样吧;可以含参数数据类型;compiler needs the infor. carried by the function prototype of the function definition b4 the function call.信息包括:返回的数据类型,函数名,参数数目和数据类型
有的情形下传递参数可以不一样
形参 局部变量 返回 都需要分配空间
int x=9.1;
这个语句会强制类型转换的,x==9
不允许函数内定义函数
extern 声明别的地方定义的函数 把有效空间引到这来了
有两种return:
void里面的,是return;
其它的要返回数据
main 也可以被调用
调用时数据类型要一致,不一致则会转换数据类型
实际参数 arguments/actual parameters
形式参数 parameters/formal paremeters
两个x没有任何关联
同一天生日的人 群里互相祝福