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;
}

浙公网安备 33010602011771号