zoukankan      html  css  js  c++  java
  • leecode第三十三题(搜索旋转排序数组)

    class Solution {
    public:
        int search(vector<int>& nums, int target) {
            int len=nums.size();
            
            if(len==0)//两种输入的特殊情况
                return -1;
            if (len==1)
                return (target==nums[0])? 0:-1;
            
            int start=0,end=len-1;
            while(start<=end)
            {
                int mid=(end-start)/2+start;
                if(nums[mid]==target)//两种循环中的特殊情况
                    return mid;
                if(start==end)
                    return -1;
                else if(nums[end]>nums[start])//如果是没有旋转的情况,比较好说
                {
                    if(nums[mid]>target)
                        end=mid;
                    else if(nums[mid]<target)
                        start=mid+1;
                }
                else if(nums[end]<nums[start])//如果是旋转的情况
                {
                    if(nums[mid]>=nums[start] && (nums[mid]<target || target<nums[start]))//如果中间值往左都是升序的,判断这个里面有没有值
                        start=mid+1;
                    else if(nums[mid]>=nums[start])//不存在就舍弃这段,不然就保留,但是要记得这里>=,因为二者有可能重叠,且上面不会有百分之百处理这个情况的
                        end=mid;
                    if(nums[mid]<nums[end] && (nums[mid]>target || target>nums[end]))//如果中间值往右都是升序的,判断这个里面有没有值
                        end=mid;
                    else if(nums[mid]<nums[end])//这里不用加=,因为如果相等说明start=end,上面就return了
                        start=mid;
                }
            }
            
            return -1;
        }
    };

     分析:

    一开始我没有想到全部的案例,在有限的案例下想到一个一般但不足以解决全部案例的想法,后来提交有错时不停加条件,发现越来越乱,于是重新想了个思路。

    可是太恶心了啊,好难想到全部的案例!!

    尤其是这种数组题。

    饶命啊。

  • 相关阅读:
    json对象与字符串的相互转换,数组和字符串的转换
    angularjs ng-csv 异步下载
    angular2 localStorage的使用
    ng-csv 异步数据下载
    微信小程序AES加密解密
    微信小程序Md5加密(utf-8汉字无影响)
    angular-file-upload封装为指令+图片尺寸限制
    angular+require前端项目架构搭建
    Inspinia_admin-V2.3原版(英文)
    hplus--H+ V2.3 (中文版)
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/10588701.html
Copyright © 2011-2022 走看看