摘要: 6.3:一个数组中有两种数出现了奇数次,其它数出现了偶数次,怎么找到并打印这两种数 两种数出现奇数次,其它偶数次 1、用eor = 0去逐个异或,最后一定是 eor = a^b, a和b是这个两个出现奇数次的数。偶数次异或为0。 2、a != b, eor != 0; eor的binary一定有1, 阅读全文
posted @ 2022-05-03 13:49 yzmarcus 阅读(174) 评论(0) 推荐(0)
摘要: 6.2:怎么把一个int类型的数,提取出最右侧的1来 int a = 01101110010000 ?处理后 int ans =00000000010000,返回。 a&((~a)+1) == a&(-a) int a = 01101110010000 ; ~a = 10010001101111 & 阅读全文
posted @ 2022-05-03 13:34 yzmarcus 阅读(108) 评论(0) 推荐(0)
摘要: 6.1:一个数组中有一种数出现了奇数次,其它数出现了偶数次,怎么找到并打印这种数? 方法一:哈希表统计词频,找到奇数次的那个数 方法二:异或运算 [4,3,4,2,4,3,1,2,1,1,1,3,3],其中1111,22,3333,444 eor = 0 去异或1111,22,3333,444 得到 阅读全文
posted @ 2022-05-03 13:21 yzmarcus 阅读(27) 评论(0) 推荐(0)
摘要: 6:异或运算 异或运算:相同为0,不同为1 同或运算:相同为1,不同为0 So,异或运算记成无进位相加 int a = 7; Binary 00111 int b= 13; 01101 a^b = ? 01010 = 10 性质: 1) 0^N = N 2) N^N= 0 3)满足交换律和结合律 a 阅读全文
posted @ 2022-05-03 13:05 yzmarcus 阅读(99) 评论(0) 推荐(0)
摘要: 5:二分法 常见的二分是在有序数组上的开展的二分搜索。 有时,有序非必要条件,会给定特定条件,只要能正确构建左右两侧的淘汰逻辑,就可以二分。 二分最经典的例子:取一半时,向下取整 在有序数组中,找某个数是否存在。 比较 mid = (L+R)/2 不安全,会溢出 mid = L + ((R - L) 阅读全文
posted @ 2022-05-03 10:09 yzmarcus 阅读(49) 评论(0) 推荐(0)
摘要: 4:对数器 没有OJ怎么办? 问题,总有办法解决,有差办法比如纯暴力的尝试,有最优解。总可以搞出2种以上的解决思路。 产生随机数据在2套思路中跑出来的数据进行对比,如果几百万次,几千万次,跑出来的结果都是一样的,小概率事件:我们写的最优解出错。 1 public static void main(S 阅读全文
posted @ 2022-05-03 09:59 yzmarcus 阅读(27) 评论(0) 推荐(0)