陣列 找出陣列中重複的數字

2021-08-25 22:20:06 字數 1653 閱讀 9660

找出陣列中重複的數字

題目:在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列, 那麼對應的輸出是重複的數字2或者3。

方法:比較數字m是不是等於i,如果是,則接著掃瞄下乙個數字;如果不是,則再拿它和第m個數字比較,如果它和第m個數字相等則找到了第乙個重複的數字(該數字下標為m和i的位置都出現了);如果不相等,則把第i個數字和第m個數字互換,把m放到屬於它位置上,再接著比較。總時間複雜度o(n),空間複雜度o(1);

#include // 找出陣列中重複的數字

// 題目:在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,

// 也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,

// 那麼對應的輸出是重複的數字2或者3。

//則找到了第乙個重複的數字(該數字下標為m和i的位置都出現了);如果不相等,則把第i個數字和第m個數字互換,把m放到屬於它

//位置上,再接著比較。

bool test(int arr, int length, int* a)

for (int i = 0;i < length;++i)

for (int i = 0;i < length;++i)

else

}} return false;

}void test1()

; bool duplicated = test(array1, sizeof(array1) / sizeof(array1[0]), &a);

if (duplicated)

printf("數字:%d 重複", a);

else

printf("沒有數字重複");

printf("\n");

}void test2()

; bool duplicated = test(array2, sizeof(array2) / sizeof(array2[0]), &a);

if (duplicated)

printf("數字:%d 重複", a);

else

printf("沒有數字重複");

printf("\n");

}void test3()

; bool duplicated = test(array3, sizeof(array3) / sizeof(array3[0]), &a);

if (duplicated)

printf("數字:%d 重複", a);

else

printf("沒有數字重複");

printf("\n");

}void test4()

; bool duplicated = test(array4, sizeof(array4) / sizeof(array4[0]), &a);

if (duplicated)

printf("數字:%d 重複", a);

else

printf("沒有數字重複");

printf("\n");

}int main()

找出陣列中重複的數字

面試題3 一 找出陣列中重複的數字 題目 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。static bool get duplicate num1 std vecto...

找出陣列中重複的數字

給定乙個長度為 n 的整數陣列 nums,陣列中所有的數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。注意 如果某些數字不在 0 n 1 的範圍內,或陣列中不包含重複數字,則返回 1 給定 nums 2,3...

找出陣列中重複的數字

在乙個長度為n的陣列中,所有的數字都在0 n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個陣列重複了幾次。請找出陣列中任意乙個重複的數字。例 輸入長度為7的陣列,對應的輸出的重複的數字是2或3。方法1 先排序在查詢 方法2 利用雜湊表 從頭到尾掃瞄每個數字,每掃瞄乙個數...