leetcode-题3
暴力遍历:
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int a[] = { 1,2,3,4,5,5,6,7,7,8,8,8,9,9,9,10,10 }; int n; cin >> n; int i = 0; for ( i= 0; i < 17; ++i) { if (a[i] == n) { cout << i << endl; break; } } if (i == 17)cout << -1 << endl; system("pause"); return 0; }
二分优化:
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int a[] = { 1,2,3,4,5,5,6,7,7,8,8,8,9,9,9,10,10 }; int n; cin >> n; int first = 0; int last = 16; while (first != last) { int mid = (first + last) / 2; if (a[mid] == n) { cout << mid << endl; break; } else { if (a[first] <= a[mid]) {//递增半边 if (a[first] <= n&&n < a[mid]) { last = mid; } else { first = mid + 1; } } else//递减半边 { if (a[mid]<n&&n<=a[last]) { first = mid + 1; } else { last = mid; } } } } if (first == last)cout << -1 << endl; system("pause"); return 0; }