题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
递归版
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
private int minNumberInRotateArray(int[] array) {
int length = array.length; if (length == 0) { return 0; } if (length == 1) { return array[0]; } else if (length == 2) { return Math.min(array[0], array[1]); } int midIndex = (length - 1) / 2; if (array[midIndex] > array[0] && array[midIndex] < array[length - 1]) { return array[0]; } if (array[midIndex] < array[0] && array[midIndex] > array[length - 1]) { return array[length - 1]; } if (array[midIndex] == array[0] && array[midIndex] == array[length - 1]) { this.minNumberInRotateArray(Arrays.copyOfRange(array, 0, length - 2)); } if (array[midIndex] == array[0] && array[midIndex] != array[length - 1]) { this.minNumberInRotateArray(Arrays.copyOfRange(array, midIndex + 1, length)); } if (array[midIndex] != array[0] && array[midIndex] == array[length - 1]) { this.minNumberInRotateArray(Arrays.copyOfRange(array, 0, midIndex + 1)); } if (array[midIndex] < array[0]) { this.minNumberInRotateArray(Arrays.copyOfRange(array, 0, midIndex + 1)); } else { this.minNumberInRotateArray(Arrays.copyOfRange(array, midIndex + 1, length)); }
return 0;
}
|
For版
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
private int method2(int[] array) {
while (true) {
int length = array.length; if (length == 0) { return 0; } if (length == 1) { return array[0]; } else if (length == 2) { return Math.min(array[0], array[1]); } int midIndex = (length - 1) / 2; if (array[midIndex] > array[0] && array[midIndex] < array[length - 1]) { return array[0]; } if (array[midIndex] < array[0] && array[midIndex] > array[length - 1]) { return array[length - 1]; } if (array[midIndex] == array[0] && array[midIndex] == array[length - 1]) { array = Arrays.copyOfRange(array, 0, length - 2); continue; } if (array[midIndex] == array[0] && array[midIndex] != array[length - 1]) { array = Arrays.copyOfRange(array, midIndex + 1, length); continue; } if (array[midIndex] != array[0] && array[midIndex] == array[length - 1]) { array = Arrays.copyOfRange(array, 0, midIndex + 1); continue; } if (array[midIndex] < array[0]) { array = Arrays.copyOfRange(array, 0, midIndex + 1); continue; } else { array = Arrays.copyOfRange(array, midIndex + 1, length); continue; }
}
}
|