旋转数组的最小数字

tech2023-08-29  92

题目

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。

思路

public class Solution { public static void main(String[] args) { int[] arr ={3,4,5,1,2}; System.out.println(minArray(arr)); } public static int spinArray(int[] numbers){ int minValue = numbers[numbers.length-1];//获取数组最后一个值 for (int i = numbers.length-2; i >= 0 ; i--){ if (minValue > numbers[i]){ minValue = numbers[i]; } } return minValue; } }

public class Solution { public static void main(String[] args) { int[] arr ={3,4,5,1,2}; System.out.println(minArray(arr)); } public static int minArray(int[] numbers){ return spinArray(numbers,0,numbers.length-1); } public static int spinArray(int[] array,int left, int right){ int mid = (left + right) / 2; if (left >= right){ return array[left]; } //判断mid值和right值的关系 if(array[mid] > array[right]){ //最小值在后面 return spinArray(array,mid+1,right); }else if(array[mid] < array[right]) { return spinArray(array, left, mid); }else { return spinArray(array, left, right - 1); } } } public class Solution { public static void main(String[] args) { int[] arr ={3,4,5,1,2}; System.out.println(minArray(arr)); } public static int minArray(int[] numbers){ int left = 0; int right = numbers.length - 1; while (left < right){ int mid = (left + right) / 2; if (numbers[mid] > numbers[right]){ left = mid + 1; }else if (numbers[mid] < numbers[right]){ right = mid; }else{ right--; } } return numbers[left]; } }
最新回复(0)