zoukankan      html  css  js  c++  java
  • [1]力扣每日一题

    2020.4.27搜索旋转排序数组

    题目呈现如下:

    题干
    题目传送门

    思路介绍:

    • 首先,题目要求复杂度在(O(log_{2}n))一下,可以预见必定要利用搜索旋转排序数组部分有序的特点,采用基于二分检索的检索方法.
    • 接下来主要的难题在于如何在搜索的某个状态,确定往前走还是往后走.实质上我们考虑的并不是左边界和有边界,我们的关注点只在--mid,亦即二分搜索每次拿来与Key对比的元素.边界的往哪个方向缩是很顺其自然的事情.我们可以列举一下可能出现的所有情况,然后据此确定往哪里缩.
      形象化的思路如图:
      流程图

    下附AC代码

    class Solution {
    public:
        int search(vector<int>& nums, int target) {
            if(!nums.size()) return -1; // 注意,没有标程里面默认非空的条件
            int l = 0, r = nums.size()-1; // 左边界和右边界
            while (l < r) {
                int mid = (l + r)/2;
                if ((nums[0] > target) ^ (nums[0] > nums[mid]) ^ (target > nums[mid])) // 这个参照题解而来,和上述思路大差不差,其亦或优化实在惊艳
                else
                    r = mid;
            }
            return nums[r] == target ? r : -1; // 这地方是r=l的,r和l都可以
        }
    };
    
  • 相关阅读:
    javascript的自定义对象
    解决trim兼容性
    AJAX
    javascript中的默认对象
    js原始数据类型
    javascript的内置对象
    空判断啊
    javascript的继承
    html如何设置P的高度为零?
    asp.net 生成静态页 自动分页
  • 原文地址:https://www.cnblogs.com/tsuipo/p/12791487.html
Copyright © 2011-2022 走看看