给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。 找到所有出现两次的元素。 你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗? 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [2,3]
class Solution {
public List<Integer> findDuplicates(int[] nums) {
List<Integer> list=new ArrayList();
for(int i=0;i<nums.length;i++){
int index=Math.abs(nums[i])-1;//-1防止数组越界 因为他是1-n 而n为数组长度
//如果他小于0,说明出现过
if(nums[index]<0){
list.add(Math.abs(nums[i]));
}else{
//否则让他* -1 <0
nums[index]*=-1;
}
}
return list;
}
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有