zoukankan      html  css  js  c++  java
  • 二分查找

    /** 二分查找 */
    int binarySearch(int nums[] ,int target,int count);
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            int count = 7;
            int a[7] = {1, 2, 3, 5, 7, 9, 10};
            int index = binarySearch(a, 9, count);
            printf("index = %d
    ",index);
        }
        return 0;
    }
    
    /** 二分查找,前提对已排序数组,时间复杂度logN(n、n/2、n/4、n/8...) */
    int binarySearch(int nums[] ,int target,int count)
    {
        if (nums == NULL || count == 0) {return -1;}
        int start = 0,end = count - 1;
        while (start + 1 < end)//保证下标(start+1)和end最多只为相邻的元素
        {
            int mid = start + (end - start) / 2;//防止程序溢出
            if (nums[mid] == target)
            {
                end = mid;
            }
            else if (nums[mid] < target)
            {
                start = mid;
            }
            else if (nums[mid] > target)
            {
                end = mid;
            }
        }
        if (nums[start] == target) {
            return start;
        }
        if (nums[end] == target) {
            return end;
        }
        return -1;
    }

     1.假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。

    你需要找到其中最小的元素。

    public int findMin(int[] num) {
            // write your code here
            int start = 0,end = num.length - 1;
            int target = num[end];
            while (start + 1 < end)
            {
                int mid = start + (end - start)/2;
                if (num[mid] < target)
                {
                    end = mid;
                }
                else if (num[mid] > target)
                {
                    start = mid;
                }
                else if (num[mid] == target)
                {
                    end = mid;
                }
            }
            
            if (num[start] <= target)
            {
                return num[start];
            }
            else
            {
                return num[end];
            }
            
        }
  • 相关阅读:
    数据分析 ---上篇
    爬虫 ---模拟登录
    Spider -- 获取图片并处理中文乱码
    爬虫篇 ---增量式爬虫
    Django中间件深入理解
    认识casbin
    关于nginx开机自己启动配置
    更改redhat yum源
    sqlalchemy监听事件
    Linux命令 history
  • 原文地址:https://www.cnblogs.com/huen/p/5135545.html
Copyright © 2011-2022 走看看