LeetCode 81 搜索旋转排序数组II

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;
    }
}
上一篇:分页查询employees表,每5行一页,返回第2页的数据(四)


下一篇:php 过滤数组的null值