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

  

posted @ 2017-05-22 20:59  babyking1  阅读(118)  评论(0编辑  收藏  举报