zoukankan      html  css  js  c++  java
  • 【Leetcode】Search in Rotated Sorted Array

    题目:给定一旋转数组和一整数,判断整数是否在该数组中。旋转数组的定义就是,把数组开始部分的若干个元素移到数组最后。此题假设数组中没有重复元素。

    思路:之前写的判断情况特别复杂,然后还出错。看了网上题解,这样想就可以了:通过判断mid元素的大小,得知是mid左边的序列有序还是右边的序列有序。每次将target元素和有序的序列首尾元素比较,若在该有序序列中,则移动相应指针使得在该序列中查找;否则,target元素在另一序列中,移动相应指针。

    需要注意的是,不管你用左闭右开区间,还是闭区间,你需要维护这个特性。在使用左闭右开区间时,取尾元素时记得-1,为nums[last-1]。

    相关:剑指offer中有类似的一题,是求旋转数组的最小值。两者思路不是很一样。求最小值时,是维护两个指针P1和P2,P1始终指向第一个递增序列,P2始终指向第二个递增序列,通过mid元素与首尾元素比较,移动P1或P2指针。最终P1和P2相邻时,P2即指向最小值。等等。。

    class Solution {
    public:
        int search(vector<int>& nums, int target) {
            int first=0;
            int last=nums.size();
            while(first<last)
            {
                int mid=first+(last-first)/2;
                
                if(nums[mid]==target) return mid;
                
                if(nums[first]<nums[mid])
                {//左边有序
                    if(nums[first]<=target && target<=nums[mid])
                        last=mid;
                    else
                        first=mid+1;
                }
                else
                {//右边有序
                    if(nums[mid]<=target && target<=nums[last-1])//既然是左闭右开区间,这里就应该是last-1
                        first=mid+1;
                    else
                        last=mid;
                }
            }
            return -1;
        }
    };
  • 相关阅读:
    URL重定向功能与APS.NET的固化功能结合
    How can I share types when generate WebSevice proxies using local paths
    C# Coding Standard Naming Conventions and Style
    VS自动化对象模型
    odac 如何捕捉错误odac 如何捕捉错误
    webbrower应用实例
    webbrower在同一个窗口打开新增窗口
    [DELPHI]$2501錯誤處理
    暴力破解例子
    webbrower连接在新form中显示
  • 原文地址:https://www.cnblogs.com/buxizhizhou/p/4687944.html
Copyright © 2011-2022 走看看