• 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]


     1 public class Solution {
     2     public List<Integer> findDuplicates(int[] nums) {
     3         List<Integer> result = new ArrayList<Integer>();
     4         
     5         for (int i = 0; i < nums.length; i++) {
     6             while(i + 1 != nums[i] && nums[i] != -1) {
     7                 if (nums[i] == nums[nums[i] - 1]) {
     8                     result.add(nums[i]);
     9                     nums[i] = nums[nums[i] - 1] = -1;
    10                     break;
    11                 }   
    12                 else swap(nums, i, nums[i] - 1);
    13             }
    14         }
    15         return result;
    16     }
    17     
    18     private void swap(int[]nums, int i, int j) {
    19         int temp = nums[i];
    20         nums[i] = nums[j];
    21         nums[j] = temp;
    22     }
    23 }
  • 相关阅读:
    C++高精度乘法
    经典的7种排序算法 原理C++实现
    c++ STL
    二分查找c++
    洛谷P1111 修复公路
    01背包写法
    c++编码规范
    github教程
    windows10锁定屏幕聚焦图片导出
    week 6 Spring history and design philosophy
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/6411699.html
Copyright © 2020-2023  润新知