一、题目描述
1.1 题目
- 变异版寻找重复数
给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数,找出所有重复数。
- 示例 1:
输入: = 4,5,7,1,4,6,5
输出: = 4 5
1.2 知识点
- 数组
二、解题思路
2.1 解题思路
跟《剑指Offer》寻找重复数题目的思路相似。
2.2 优化思路
可将 int 数组优化为 BitSet
2.3 类似题型
三、实现代码
3.1 代码实现
import java.util.*;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> ret = new ArrayList<>();
int[] arr = new int[]{4,5,7,1,4,6,5};
for(int i = 0; i < arr.length; i++){
while(arr[i] != i+1){
if(arr[arr[i]-1] == arr[i]){
ret.add(arr[i]);
break;
} else {
swap(arr, i, arr[i]-1);
}
}
}
for(int i = 0; i < ret.size(); i++)
System.out.print(ret.get(i) + " ");
}
private static void swap(int[] arr, int i1, int i2){
int temp = arr[i1];
arr[i1] = arr[i2];
arr[i2] = temp;
}
}