Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

33. 搜索旋转排序数组 #70

Open
Labels
@Geekhyt

Description

@Geekhyt

原题链接

二分查找

先来看下有序数组的二分查找。

constsearch=function(nums,target){letstart=0letend=nums.length-1while(start<=end){constmid=start+((end-start)>>1)if(nums[mid]===target)returnmidif(nums[mid]<target){start=mid+1}else{end=mid-1}}return-1}
  1. 再来明确,因为本题是旋转数组,我们无法直接根据nums[mid]target 的关系来定位target 是在mid 的左边还是右边
  2. 需要分段处理,先比较nums[mid]nums[start] 的大小,来定位mid 在左边还是右边
  3. 继续定位target,判断targetmid 的左边还是右边,然后分别调整边界startend
constsearch=function(nums,target){letstart=0letend=nums.length-1while(start<=end){constmid=start+((end-start)>>1)if(nums[mid]===target)returnmidif(nums[mid]>=nums[start]){if(target>=nums[start]&&target<nums[mid]){end=mid-1}else{start=mid+1}}else{if(target>nums[mid]&&target<=nums[end]){start=mid+1}else{end=mid-1}}}return-1}
  • 时间复杂度:O(logn)
  • 空间复杂度:O(1)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions


      [8]ページ先頭

      ©2009-2025 Movatter.jp