营销型网站有什么特点,嘉兴网站推广价格,泉州全网营销推广,群晖搭建wordpress端口多少前言
仅记录学习笔记#xff0c;如有错误欢迎指正。
题目 记录一道面试过的题目 题目如下#xff1a;
给定一个数组#xff0c;内容为1-n的数字#xff0c;其中每个数字只会出现一次或者多次#xff0c;请在时间复杂度O(n),空间复杂度O(1)的条件下找出所有出现一次的数…前言
仅记录学习笔记如有错误欢迎指正。
题目 记录一道面试过的题目 题目如下
给定一个数组内容为1-n的数字其中每个数字只会出现一次或者多次请在时间复杂度O(n),空间复杂度O(1)的条件下找出所有出现一次的数字集合。
例子
输入 1, 2, 3, 4, 5, 4, 3, 2
输出: 51
解释: 1,5只出现一次
代码
之前好像见过但是没用心记录。 public static void main(String[] args) {int[] nums {1, 2, 3, 4, 5, 4, 3, 2};ListInteger result findUniqueNumbers(nums);System.out.println(Unique numbers: result);}public static ListInteger findUniqueNumbers(int[] nums) {ListInteger result new ArrayList();// 使用异或运算找到所有出现一次的数字int xor 0;for (int num : nums) {xor ^ num;}// 找到异或结果中最低位的1int lowestBit xor -xor;// 根据最低位的1将数组分成两部分分别进行异或运算int group1 0, group2 0;for (int num : nums) {if ((num lowestBit) ! 0) {group1 ^ num;} else {group2 ^ num;}}// 将出现一次的数字添加到结果列表中if (isUnique(group1, nums)) {result.add(group1);}if (isUnique(group2, nums)) {result.add(group2);}return result;}public static boolean isUnique(int num, int[] nums) {int count 0;for (int n : nums) {if (n num) {count;}}return count 1;}