Leetcode -- Find Minimum in Rotated Sorted Array
2015-10-10 19:06
447 查看
题目描述:
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.
思路:二分法查找。
1. 如果中间值(nums[m]) < 最左边值(nums[l]),最小值在左半部分,即r = m
2. 如果nums[m] > nums[l],如果此时nums[r] > nums[m],即nums[r]>nums[m]>nums[l],说明nums[l]就是最小值。否则,最小值在右半部分,即l=m。
3. 循环条件为l < r-1,如果最后没有找到,需要比较nums[l]和nums[r]的大小
实现代码:
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.
思路:二分法查找。
1. 如果中间值(nums[m]) < 最左边值(nums[l]),最小值在左半部分,即r = m
2. 如果nums[m] > nums[l],如果此时nums[r] > nums[m],即nums[r]>nums[m]>nums[l],说明nums[l]就是最小值。否则,最小值在右半部分,即l=m。
3. 循环条件为l < r-1,如果最后没有找到,需要比较nums[l]和nums[r]的大小
实现代码:
public class Solution { public int FindMin(int[] nums) { var l = 0; var r = nums.Length - 1; while(l < r - 1){ var m = (l + r) / 2; if(nums[m] < nums[l]){ r = m; } else if(nums[m] > nums[l]){ if(nums[r] > nums[m]){ return nums[l]; } l = m; } } return Math.Min(nums[l], nums[r]); } }
相关文章推荐
- 买一送一的最小代价问题
- Android 5.1 Contacts源码分析(五):PeopleActivity
- for循环的一种简化
- for循环的一种简化
- LeetCode -- Edit Distance
- Android 沉浸模式开发
- LeetCode -- Combination Sum II
- xml约束 Schema
- js2次学习----label语句
- 软件功能测试案例分析
- Linux系统升级gcc/g++
- codeforces 583C GCD Table
- js2次学习-----with语句
- hdu 5036 Explosion(有向图的删点期望+bitset优化)
- linux 常用命令
- ViewModel在MVC3中的应用:实现多字段表格的部分更新
- zoj2112 主席树动态第k大 (主席树&&树状数组)
- DrawText
- centos7 修改默认语言
- 如何查看树莓派cpu温度