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;
        }
    };
  • 相关阅读:
    修改Echarts 图表的坐标轴的文本的排列位置
    dataTable组件使用
    jeecg使用uploadify上传组件
    session属性的清除和非法登录
    Freemaker模板指令
    Freemarker的循环通过assign指令引入计数变量
    测试计划模板
    python+requests接口自动化测试框架实例详解教程(米兔888)
    jmeter(二十二)内存溢出原因及解决方法
    Jmeter(四)_逻辑控制器详解
  • 原文地址:https://www.cnblogs.com/buxizhizhou/p/4687944.html
Copyright © 2011-2022 走看看