//判断数组中是否有重复的数字,有则返回true,没有则返回false//方法一:先用时间复杂度为O(nlogn)的排序将数组重建,然后遍历寻找 //方法二:新建一个数组型hash表,key存num[i], value存num[i]出现的次数。时间复杂度为O(n),空间复杂度为O(n) public static boolean Dup(int[] num){ int hash[]
public static boolean Dup(int[] num){
int hash[] = new int[num.length + 1];
for (int i = 0; i < num.length; i ++){
if (hash[num[i]] == 0){
hash[num[i]] ++;
}
else {
return true;
}
}
return false;
}
//方法三:整个过程就是将数组元素值num[i]与i进行对应,比如i = 0, num[i] = 1,num[i] != i,那么接着判断num[num[i]]也就是1的位置是否着num[i]即1,如果是,则说明有两个1,返回true,若不是,则交换num[i]和num[num[i]],让元素值1在index = 1的位置。时间复杂度为O(n),空间复杂度为O(1)
public static boolean Dup(int[] num){
for (int i = 0; i < num.length; i ++){
while (num[i] != i){
if (num[num[i]] != num[i]){
int tmp = num[i];
//判断数组中是否有重复的数字,有则返回true,没有则返回false//方法一:先用时间复杂度为O(nlogn)的排序将数组重建,然后遍历寻找 //方法二:新建一个数组型hash表,key存num[i], value存num[i]出现的次数。时间复杂度为O(n),空间复杂度为O(n) public static boolean Dup(int[] num){ int hash[]