1 先排序,再寻找
#include <iostream>
#include <vector>
using namespace std;
class Solution
{
public:
//找到数组中重复的数字
bool duplicate(vector<int> &numbers, int* duplication) {
/*if (CheckValidity(numbers) == false) {
return false;
}*/
*duplication = -1;
SectionSort(numbers);
int i = 0;
bool isDup = false;
*duplication = -1;
for (i = 0; i < numbers.size() - 1; i++) {
if (numbers[i] == numbers[i + 1]) {
isDup = true;
*duplication = numbers[i];
break;
}
}
return isDup;
}
// 检查合法性
bool CheckValidity(vector<int> &numbers) {
if (numbers.size() == 0) {
return false;
}
for (int i = 0; i < numbers.size(); i++) {
if (numbers[i] < 0 || numbers[i] > numbers.size() - 1) {
return false;
}
}
return true;
}
//插入排序
void SectionSort(vector<int> &array) {
if (array.size() == 0 || array.size() < 2) {
return;
}
for (int i = 1; i < array.size(); i++) {
for (int j = i-1; j >= 0; j--) {
if (array[j] > array[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
//swap(array[j], array[j+1]);
}
}
}
}
};
int main()
{
int a1[] = { 5, 7 , 6, 3, 4, 9, 8};
int a2[] = { 1, 2 , 4, 8, 4, 8, 9};
vector<int> vec(a2, a2 + 7);
int num2 = 0;
Solution s;
cout << s.duplicate(vec, &num2) << endl;
cout << num2 << endl;
//cout << s.GetNumberOfK2(vec, 8) << endl;
/*for (int i = 0; i < array.size(); i++) {
cout << array[i] << endl;
}*/
}