劍指offer 50 找到陣列中重數的數字
阿新 • • 發佈:2018-12-30
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; }*/ }