Search Rotate Position in Sorted Array

来源:互联网 发布:网络渗透软件 编辑:程序博客网 时间:2024/05/01 08:38
public static int searchHelper(int[] arr, int left, int right) {if (left > right) {return -1;}int mid = left + (right - left) / 2;// 正常顺序, 一直找到左端if (mid == 0) {// 特殊情况, 只rotate一次,例如  5,1,2,3,4if (arr.length > 1 && arr[mid] > arr[mid + 1]) return 1;return 0;}// 逆序, 一直找到右端if (mid == arr.length - 1) {return arr.length;}// 找到 rotate 点的条件if (arr[mid] > arr[mid + 1] && arr[mid] >= arr[mid - 1]) {return mid + 1;}// 右边顺序正常,到左边找if (arr[mid] < arr[right]) {return searchHelper(arr, left, mid - 1);// 右边顺序不正常,到右边找} else if (arr[mid] > arr[right]) {return searchHelper(arr, mid + 1, right);// 特殊情况, 有 duplicate, 左右判断不出来,例如 {2,2,2,2,1,2,2}, 左右都找} else {int searchLeftResult = searchHelper(arr, left, mid - 1);int searchRightResult = searchHelper(arr, mid + 1, right);if (searchLeftResult == -1 && searchRightResult == -1) return -1;if (searchLeftResult != -1) return searchLeftResult;if (searchRightResult != -1) return searchRightResult;return -1;}}public static int searchRotatePosition(int[] arr) {return searchHelper(arr, 0, arr.length - 1);}


几个 test case:

A0 = {3,4,5,6,7,8,1,2}
A1 = {1,2,3,4,5,6,7}
A2 = {7,6,5,4,3,2,1}
A3 = {5,1,1,1,2,3,4}
A4 = {2,2,3,4,1,2,2}
A5 = {2,2,2,2,1,2,2}

0 0
原创粉丝点击