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]
题目含义:给定一个整数组成的数组,其中数组中的元素满足1 ≤ a[i] ≤ n ,n是数组的元素个数。一些元素出现了两次,而其它元素只出现了一次。
找出那些出现了两次的元素。要求没有占用额外的空间而且时间复杂性为 O(n) 。
1 public List<Integer> findDuplicates(int[] nums) { 2 List<Integer> res = new ArrayList<>(); 3 for (int i = 0; i < nums.length; ++i) { 4 int index = Math.abs(nums[i])-1; 5 if (nums[index] < 0) //判断这个数作为下标,在nums中的数是否为负,如果是负,则表示之前出现过 6 res.add(Math.abs(nums[i])); 7 nums[index] = -nums[index]; 8 } 9 return res; 10 }
类似题目:
287. Find the Duplicate Number
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步