美文网首页
find duplicate

find duplicate

作者: ibyr | 来源:发表于2017-02-09 21:39 被阅读11次
    Question

    Given an array of integers, 1 <= a[i] <= n (n = size of array). Some elements appear twice and others appear once.
    Find all the elements that appear twice.

    Note
    • 正负标记法
    • 遍历数组,记index = Math.abs( nums[i] ) - 1(因为nums[index] 在[1, n],减1则index在[0, n-1]),将index作为数组nums的下标。
    • 当 n 首次出现,nums[index] 乘以-1。
    • 当 n 再次出现,则 nums[index] < 0,将nums[i]加入res。
    Extension
    • 数组中查找重复元素,使用正负标记方法,或者其他标记方法。
    Solution
    public List<Integer> findDuplicate(int[] nums) {
        List<Integer> res = new ArrayList<>();
        if  (nums.length < 1) {
            return res;
        }
        for (int i = 0; i < nums.length; i++) {
            int index = Math.abs(nums[i]) - 1;    // 获取index
            if (nums[index] < 0) {    // 已经被标记过一次
                res.add(index + 1);
            } else {    // 首次遇到,取反,标记一次。
                nums[index] = -nums[index];
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:find duplicate

          本文链接:https://www.haomeiwen.com/subject/kbjwittx.html