zoukankan      html  css  js  c++  java
  • 442. Find All Duplicates in an Array

    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 in this array.

    Could you do it without extra space and in O(n) runtime?

    Example:

    Input:
    [4,3,2,7,8,2,3,1]
    
    Output:
    [2,3]
    class Solution {
        public List<Integer> findDuplicates(int[] nums) {
            List<Integer> res = new ArrayList();
            Arrays.sort(nums);
            for(int i = 0; i < nums.length-1; ){
                if(nums[i] == nums[i+1]){
                    res.add(nums[i]);
                    i+=2;
                }
                else{          
                    i++;
                }
            }
            return res;
        }
    }

    这算O(n)吗??好像不算

    public class Solution {
        public List<Integer> findDuplicates(int[] nums) {
            List<Integer> res = new ArrayList<>();
            if (nums.length <= 1) return res;
            
            for (int i = 0; i < nums.length; i++) {
                int next = Math.abs(nums[i]) - 1;
                if (nums[next] < 0) res.add(next+1);
                else nums[next] = -nums[next];
            }
            
            return res;
        }
    }

    这种方法利用了1 ≤ a[i] ≤ n,即a[i]-1一定是nums的index

    如果一个数出现两次,第一次出现的时候先把它变成负的,然后第二次出现只要他是负的就res.add()

    https://www.cnblogs.com/reboot329/articles/6006346.html

  • 相关阅读:
    Alpha项目冲刺_博客链接合集
    项目系统设计
    项目需求分析
    项目选题
    项目展示
    原型设计 + 用户规格说明书
    测试与优化
    结对作业1
    MathExam6317
    js入门基础
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/12886816.html
Copyright © 2011-2022 走看看