小吃网站建设规划书,淘宝优惠券查询网站怎么做,移动免费网站建设,新津县网站建设[LeetCode] 442. 数组中重复的数据(Java)
1.题目描述
给你一个长度为 n 的整数数组 nums #xff0c;其中 nums 的所有整数都在范围 [1, n] 内#xff0c;且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数#xff0c;并以数组形式返回。
你必须设计并实现一个…[LeetCode] 442. 数组中重复的数据(Java)
1.题目描述
给你一个长度为 n 的整数数组 nums 其中 nums 的所有整数都在范围 [1, n] 内且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数并以数组形式返回。
你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。
示例 1输入nums [4,3,2,7,8,2,3,1]
输出[2,3]
示例 2输入nums [1,1,2]
输出[1]
示例 3输入nums [1]
输出[]2.解题思路
原地哈希算法
可以参考这篇文章 算法 原地哈希算法(java)
3.解法
原地哈希算法
class Solution {public ListInteger findDuplicates(int[] nums) {ListInteger list new ArrayList();for (int i 0; i nums.length; i){// 元素对应的索引int index Math.abs(nums[i]) - 1;// 首次在索引处的元素取反if (nums[index] 0){nums[index] * -1;}else {// 如果小于零说明第二次出现list.add(index 1);} }return list;}
}4.技能点
原地哈希算法