异或
有n种数字,其中 n - 1种在数组中出现了偶数字,1个数字出现了一次,怎么找出?
很简单,遍历一遍,全部异或,剩下的就是那个数字
有n种数字,其中 n - 2 种在数组中出现了偶数次,2 种数字出现了1次,怎么找出?
也全部异或一遍,然后剩下的那个数字的某个位数为1的话表示两个出现一次的数字的某一个数字这个位是1,然后再遍历一遍数组,将这个位上同样是1的数字和上一次异或的结果异或一次(其中,另一个出现一次的数字不会被选择,然后其他的数字出现了偶数次,那个位数为1的出现1次的数字就会被异或掉),剩下的就是另一个出现了一次的数字
取自己最右侧的1的位
cpp
eor & (~eor + 1)
比较器
- 返回负数的时候,第一个参数排在前面
- 返回正数的时候,第二个参数排在前面
- 返回0的时候,谁在前面无所谓
cpp
public int compare(Student o1,Student o2) {
return o1.id - o2.id;
} 升序
public int compare(Student o1,Student o2) {
return o2.id - o1.id;
} 降序
Arrays.sort(students,this::compare);