leetcode: Find Minimum in Rotated Sorted Array

题目是这样的:

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

Find the minimum element.

You may assume no duplicate exists in the array.

这里已经说明数组内没有重复的值,

解这个题:

  • 首先想到最简单的办法就是直接从num[0]开始找,一直找到值变小时候,就是 the pivot;(当数组顺序时候这个点应该是num[0]) 这种算法的时间复杂度为O(N),属于最慢的。
  • 其次 一种方法就是设置两个观察指针i = num[0]  j = num[num.length - 1]。排除顺序的情况时候,我们可以看出,这个局部有序的数组可以分成两部分,其中第一部分num[0...k-1]的所有值要比第二部分num[k...num.length - 1]的值要大,将i 和 j 同时先后先前,对应数值比较,假如num[i]>num[j]则继续移动,如果num[i]<num[j]时候则恰好找到该位置。
  • 目前 找到最快的方式就是二分查找,其时间复杂度是Log(N)

关键是中间一个值num[mid]与num[j](或者num[i])进行比较:若num[mid] > num[j],则需要将i的值进行重置;否则 重置j的值,这里需要考虑好是否需要mid+1;因为这里没有重复的值 所以比较时候就仅仅考虑大于和小于两种情况。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值