本文主要是介绍leetcode 442. Find All Duplicates in an Array | 442. 数组中重复的数据(位运算),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
https://leetcode.com/problems/find-all-duplicates-in-an-array/
题解
没想出来,看了评论之后写的,一语点醒。
思路就是,用num对应index的最高位表示是否出现过。
class Solution {public List<Integer> findDuplicates(int[] nums) {// when find a number i, flip the number at position i-1 to negative.// if the number at position i-1 is already negative, i is the number that occurs twice.ArrayList<Integer> list = new ArrayList<>();for (int i = 0; i < nums.length; i++) {int n = nums[i] & (0b01111111_11111111_11111111_11111111); // 最高位置0if (nums[n - 1] >>> 31 == 1) list.add(n);else nums[n - 1] |= (1 << 31);}return list;}
}
这篇关于leetcode 442. Find All Duplicates in an Array | 442. 数组中重复的数据(位运算)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!