Leetcode: Find Minimum in Rotated Sorted Array I & II (Java)
2015-05-25 20:04
621 查看
两道题,一道是无重复元素的有序数组,另一道是有重复元素的有序数组。虽然经过旋转,但是有序数组仍然应该使用二分查找。二分查找仍然是简单的递归思想。
第一题:
第二题凡是出现大于关系,则与第一题处理一样。
此外要多考虑
的情况,此时最小元素既有可能在(begin, mid]内,也可能在(mid, end]内。例如[3, 3, 1, 3]或[3, 1, 3, 3, 3, 3]。
另外,若
则最小值一定就是nums[begin]。
第二题:
第一题:
public class Solution { public int findMin(int[] nums) { return findMinRange(nums, 0, nums.length-1); } public int findMinRange(int[] nums, int begin, int end) { int mid; int min; if (begin==end) return nums[begin]; mid = (begin + end) / 2; if (nums[begin] > nums[mid]) min = findMinRange(nums, begin+1, mid); else if (nums[mid] > nums[end]) min = findMinRange(nums, mid+1, end); else min = nums[begin]; return min; } }
第二题凡是出现大于关系,则与第一题处理一样。
此外要多考虑
nums[begin]==nums[mid] && nums[mid]==nums[end]
的情况,此时最小元素既有可能在(begin, mid]内,也可能在(mid, end]内。例如[3, 3, 1, 3]或[3, 1, 3, 3, 3, 3]。
另外,若
nums[begin]<nums[mid] && nums[mid]==nums[end]
则最小值一定就是nums[begin]。
第二题:
public class Solution { public int findMin(int[] nums) { return findMinRange(nums, 0, nums.length-1); } public int findMinRange(int[] nums, int begin, int end) { int mid; int min; if (begin==end) return nums[begin]; mid = (begin + end) / 2; if (begin==mid) { if (nums[begin]<=nums[end]) return nums[begin]; else return nums[end]; } if (nums[begin] > nums[mid]) min = findMinRange(nums, begin+1, mid); else if (nums[begin] == nums[mid]) { if (nums[mid] > nums[end]) min = findMinRange(nums, mid+1, end); else if (nums[mid] == nums[end]) { int min1, min2; min1 = findMinRange(nums, begin+1, mid); min2 = findMinRange(nums, mid+1, end); if (min1<=min2) min = min1; else min = min2; } else min = findMinRange(nums, begin+1, mid); } else { if (nums[mid] > nums[end]) min = findMinRange(nums, mid+1, end); else min = nums[begin]; } return min; } }
相关文章推荐
- Leetcode | Find Minimum in Rotated Sorted Array I && II
- [Leetcode]Find Minimum in Rotated Sorted Array I & II
- [Leetcode]Find Minimum in Rotated Sorted Array I & II
- 【LeetCode】【Solution】Find Minimum in Rotated Sorted Array I & II
- 【leetcode】Find Minimum in Rotated Sorted Array I&&II
- !leetcode[153 & 154]:Find Minimum in Rotated Sorted Array I & II
- [LeetCode]Find Minimum in Rotated Sorted Array I&II
- 【LeetCode-面试算法经典-Java实现】【154-Find Minimum in Rotated Sorted Array II(找旋转数组中的最小数字II)】
- LeetCode Find Minimum in Rotated Sorted Array & LeetCode Find Minimum in Rotated Sorted Array II
- [LeetCode]Find Minimum in Rotated Sorted Array I&II
- [leetCode] Find Minimum in Rotated Sorted Array I & II
- 【leetcode】Find Minimum in Rotated Sorted Array I & II (middle)
- 【leetcode】Find Minimum in Rotated Sorted Array I &II
- Java for LeetCode 154 Find Minimum in Rotated Sorted Array II
- [Leetcode 153 && 154] Find Minimum in Rotated Sorted Array (II)
- Leetcode(12) - Find Minimum in Rotated Sorted Array II
- LeetCode 153&154 Find Minimum in Rotated Sorted Array
- LeetCode之Find Minimum in Rotated Sorted Array II
- [LeetCode] Find Minimum in Rotated Sorted Array II
- Find Minimum in Rotated Sorted Array II -- LeetCode