Rotated and 2-D Array
Find Peak Element:
- 如何知道哪边才可能出现极值,很大可能是在递增区间
- 用mid 与 mid + 1来确定哪边是递增区间
- 黄金分割搜索用求函数极值,二分法用来求函数的根
Find Peak Element II:
左右上下都是出现了峰值的可能,多一个维度的峰值
- 想法跟前者是一样的,用mid 与 mid + 1来判断走势
- 可是为何只用一次上下维度的二分查找
Find Minimum in Rotated Sorted Array II:
- Check current position in left part of right part:
nums[mid] < nums[right] - Duplicate allowed:
nums[mid] == nums[right]→right--(why notleft++)
Search in Rotated Sorted Array II:
- Check current position in left part of right part:
nums[mid] < nums[right] - left part:
nums[mid] < target-->left = mid + 1nums[mid] > targettarget < nums[right]-->left = mid + 1target > nums[right]-->right = mid
- right part:
nums[mid] > target-->right = midnums[mid] < targettarget < nums[right]-->left = mid + 1target > nums[right]-->right = mid
Search a 2D Matrix II
- start from top right go down and left
O(m + n) - classic binary search and divide and conquer by divide four blocks
O(n^log3)
public boolean searchMatrix(int[][] matrix, int target) {
if (matrix.length == 0 || matrix[0].length == 0) return false;
int x = 0, y = matrix[0].length - 1;
while (y >= 0 && x < matrix.length) {
if (matrix[x][y] == target) return true;
if (matrix[x][y] < target) {
x++;
} else {
y--;
}
}
return false;
}