Find Min In Rotated Sorted Array,寻找反转序列中最小的元素。

问题描述:寻找反转序列中最小的元素。

算法分析:和寻找某个数是一个道理,还是利用二分查找,总体上分两种情况。nums[left]<=nums[mid],else。但是,在截取子序列的时候,有可能得到一个顺序序列。如34512,截取后得到12,此时要对这种情况判断,因为是顺序的,所以,最左边的元素就是最小元素。这点区别于寻找target,因为寻找target是根据target和left,mid,right做比较判断的。所以就不用对这种顺序情况单独讨论了。

 

 1 public int findMin(int[] nums)
 2         {
 3             return findMin(nums, 0, nums.length - 1);
 4         }
 5         //递归
 6         public int findMin(int[] nums, int left, int right)
 7         {
 8             if(left == right)
 9             {
10                 return nums[left];
11             }
12             if(nums[left] < nums[right])//例如34512,在截取子序列时候,很可能就得到一个顺序序列,这时候直接判断。
13             {
14                 return nums[left];
15             }
16             int mid = (left+right)/2;
17             if(nums[left] < nums[mid])
18             {
19                 return findMin(nums, mid+1, right);
20             }
21             else
22             {
23                 return findMin(nums, left, mid);
24             }
25         }
26         
27         //迭代
28         public int findMin2(int[] nums, int left, int right)
29         {
30             while(left <= right)
31             {
32                 if(nums[left] < nums[right])
33                 {
34                     return nums[left];
35                 }
36                 if(left == right)
37                 {
38                     return nums[left];
39                 }
40                 int mid = (left+right)/2;
41                 if(nums[left] <= nums[mid])
42                 {
43                     left = mid + 1;
44                 }
45                 else
46                 {
47                     right = mid;
48                 }
49             }
50             return -1;
51         }

 

转载于:https://www.cnblogs.com/masterlibin/p/5572385.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值