題目:在乙個長度為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的...