陣列中的重複數字

2021-09-10 14:20:11 字數 3017 閱讀 5969

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

分析:陣列中的數字都在0~n-1之間,如果沒有該陣列中沒有重複的數字,那麼陣列重新排序之後數字i出現的位置將是陣列下標為i的位置。所有我們對該陣列重新排序,從頭到尾依次掃瞄這個陣列中的每個數字。假設該陣列名為numbers,當掃瞄到下標為i(numbres[i])比較是不是和i相等。如果是,則接著掃瞄下乙個數字,如果不是,則將下標為numbers[i]的元素和numbers[numbers[i]互換,如果numbers[i]與numbers[numbers[i]]相等,則找到重複的數字。

實現**:

/*

引數:number:陣列

length:長度

value:重複的值

返回值:

true:有重複值

false:無重複值或引數錯誤

*/bool selectduplicate(int numbers, int length, int* value)

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

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

numbers[i] = numbers[temp];

numbers[temp] = numbers[i];

} }return false;

}

測試**用的是原書中的,附上完整**:

///*

題目一:找出陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0~n-1的範圍內,陣列中的某些數字

是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出

陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,

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

*/#include "pch.h"

#include #include #pragma warning(disable:4996)

using namespace std;

/* 引數:

number:陣列

length:長度

value:重複的值

返回值:

true:有重複值

false:無重複值或引數錯誤

*/bool selectduplicate(int numbers, int length, int* value)

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

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

numbers[i] = numbers[temp];

numbers[temp] = numbers[i];

} }return false;

}// ********************測試**********************

bool contains(int array, int length, int number)

return false;

}void test(const char* testname, int numbers, int lengthnumbers, int expected, int expectedexpected, bool validargument)

else

printf("passed.\n");

} else

printf("failed.\n");

}// 重複的數字是陣列中最小的數字

void test1()

; int duplications = ;

test("test1", numbers, sizeof(numbers) / sizeof(int), duplications, sizeof(duplications) / sizeof(int), true);

}// 重複的數字是陣列中最大的數字

void test2()

; int duplications = ;

test("test2", numbers, sizeof(numbers) / sizeof(int), duplications, sizeof(duplications) / sizeof(int), true);

}// 陣列中存在多個重複的數字

void test3()

; int duplications = ;

test("test3", numbers, sizeof(numbers) / sizeof(int), duplications, sizeof(duplications) / sizeof(int), true);

}// 沒有重複的數字

void test4()

; int duplications = ; // not in use in the test function

test("test4", numbers, sizeof(numbers) / sizeof(int), duplications, sizeof(duplications) / sizeof(int), false);

}// 沒有重複的數字

void test5()

; int duplications = ; // not in use in the test function

test("test5", numbers, sizeof(numbers) / sizeof(int), duplications, sizeof(duplications) / sizeof(int), false);

}// 無效的輸入

void test6()

; // not in use in the test function

test("test6", numbers, 0, duplications, sizeof(duplications) / sizeof(int), false);

}int main()

陣列中重複數字

題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中第乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。返回描述 如果陣列中有重複的數字,函式返回true,否則返回...

陣列中的重複數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。1 排序 將陣列排序,然後掃瞄排序後的陣列即可。時間複雜度 o nl...

陣列中的重複數字

遍歷整個陣列,判斷是否存在與於set中,不存在將其放入即可,若存在,即找到了重複數字,跳出迴圈 public static int findbyhashset int x int re 0 set sset new hashset for int i 0 i可以對陣列進行整個遍歷,當掃瞄的下標為i的...