zoukankan      html  css  js  c++  java
  • 81. Search in Rotated Sorted Array II

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

    (i.e., [0,0,1,2,2,5,6] might become [2,5,6,0,0,1,2]).

    You are given a target value to search. If found in the array return true, otherwise return false.

    Example 1:

    Input: nums = [2,5,6,0,0,1,2], target = 0
    Output: true
    

    Example 2:

    Input: nums = [2,5,6,0,0,1,2], target = 3
    Output: false

    Follow up:

    • This is a follow up problem to Search in Rotated Sorted Array, where nums may contain duplicates.
    • Would this affect the run-time complexity? How and why?
     
    AC code:
    class Solution {
    public:
        bool search(vector<int>& nums, int target) {
            if (nums.size() == 1 && nums[0] == target) return true;
            int l = 0, r = nums.size()-1, m;
            while (l <= r) {
                m = (l + r) / 2;
                if (nums[m] == target) return true;
                if (nums[m] == nums[l] && nums[m] == nums[r]) l++, r--;
                else if (nums[m] <= nums[r]) {
                    if (target > nums[m] && target <= nums[r])
                        l = m + 1;
                    else 
                        r = m - 1;
                } else {
                    if (target < nums[m] && target >= nums[l])
                        r = m - 1;
                    else 
                        l = m + 1;
                }
            }
            return false;
        }
    };
    

    Runtime: 4 ms, faster than 99.15% of C++ online submissions for Search in Rotated Sorted Array II.

    题解:找出排列有序的一端进行二分查找。

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    LeetCode刷题7——数字的补数
    Leetcode刷题6—不同路径
    Leetcode刷题5—最大子序和
    LeetCode刷题4——子集
    LeetCode刷题3——位1的个数
    LeetCode刷题2——颠倒二进制位
    小鸡啄米问题求解
    weavenet
    为系统守护进程预留计算资源
    PolicyRouting (ip rule)
  • 原文地址:https://www.cnblogs.com/h-hkai/p/9844823.html
Copyright © 2011-2022 走看看