码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode 81 搜索旋转排序数组II

时间:2020-11-24 12:11:34      阅读:7      评论:0      收藏:0      [点我收藏+]

标签:code   ++   turn   二分   输出   lin   als   判断   lang   

LeetCode81 搜索旋转排序数组II

题目描述

假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。

编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。

样例

输入: nums = [2,5,6,0,0,1,2], target = 0
输出: true
输入: nums = [2,5,6,0,0,1,2], target = 3
输出: false

算法分析

  • 扫描
  • 二分 先删除

时间复杂度

扫描\(O(n)\)

二分\(O(n)\)最坏情况下

Java代码

class Solution {
    public boolean search(int[] nums, int target) {
        for(int i = 0; i < nums.length; i ++) {
            if(nums[i] == target){
                return true;
            }
        }

        return false;
    }
}
class Solution {
    public boolean search(int[] nums, int target) {
        if(nums.length == 0) return false;
        int R = nums.length - 1;
        while( R >=0 && nums[R] == nums[0]) R--;
        if(R < 0){
            return nums[0] == target;
        }

        int l = 0;
        int r = R;

        while(l < r){
            int mid = l + r + 1 >> 1;
            if(nums[mid] >= nums[0]) l = mid;
            else r = mid - 1;
        }

        if(target >= nums[0]){
            r = l;
            l = 0;
        }
        else{
            l++;
            r = R;
        }

        while(l < r) {
            int mid = l + r >> 1;
            if(nums[mid] >= target) r = mid;
            else l = mid + 1;
        }

        return nums[r] == target;
    }
}

LeetCode 81 搜索旋转排序数组II

标签:code   ++   turn   二分   输出   lin   als   判断   lang   

原文地址:https://www.cnblogs.com/vccyb/p/14007560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!