Java--算法--复杂度&对数器&二分法&异或
- 时间复杂度:
-
排序算法:
-
算法评估指标:
-
对数器:
-
二分法:
-
-
异或运算:
-
-
-
- N&(~(N)+1) :取出N的最右侧的1
-
-
package com.model.question; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/8/14 13:37 * 异或操作 * 一个数组,已知:某两个数出现次数事奇数次,其他的都是偶数次,求出这两个数 */ public class QuestionDemo02 { public static void main(String[] args) { int[] arr = {1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4}; //2和4出现次数是奇数次 XOR(arr); } public static void XOR(int[] arr) { int res = 0; for (int val : arr) { res ^= val; } // 找出res最右侧的1, 说明我们要找的两个数在这一位上是不相等的 // 最右侧的1等于 n & (~n+1) // &:与 // ~:取反 // 10010 // 1.取反:01101 // 2.取反加一: 01110 // 3.10010 & 01110 = 00010 的到最右侧的1 // int rightOne = res & (~res + 1); // 找到数组所有 rightOne 这一位上位1 的数进行异或操纵 // n & 00010=1 :说明 n的第二位上位1 int res1 = 0; for (int val : arr) { if ((val & rightOne) == rightOne) { res1 ^= val; } } System.out.print("出现奇数次的:" + res1+"\t"); System.out.println(res^res1); } }
-
-
-