【leetcode】33. Search in Rotated Sorted Array

网址

题目

一顺序排列的数组以某个位置为中心旋转后所得数组,从中以O( l o g n logn logn)时间找到某个数的索引。

解法

  • 挺简单一题,花在debug时间较长,一些特殊情况总是没搞对…
  • 我的做法是找出偏移量的大小,再基于这个偏移量二分
  • 这个时间超过100%的人也是惊了?
  • 看讨论区还有其它的做法,比如可以直接把数组劈成两段只需要在可能存在的一段找即可。这种做法应该花的时间更少。
    在这里插入图片描述
class Solution {
    public int search(int[] nums, int target) {
        int start = 0, end = nums.length - 1, bias;
        while(start < end){
            int mid = (start + end) / 2;
            // System.out.println(start+" "+end);
            if(nums[mid] > nums[end]){
                start = mid + 1;
            }else{
                end = mid;
            }
        }

        bias = start; start = 0; end = nums.length - 1;
        while(start <= end){
            int mid = (start + end) / 2;
            int mid_index = (bias+mid)%nums.length;
            // System.out.println(bias+" "+start+" "+end+" "+mid+" "+mid_index);
            if(nums[mid_index] == target){
                return mid_index;
            }else if(nums[mid_index] < target){
                start = mid + 1;
            }else{
                end = mid - 1;
            }            
        }
        return -1;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值