LeetCode-Algorithms-[Easy]面试题11. 旋转数组的最小数字

面试题11. 旋转数组的最小数字

最优解是二分法,题解内有

第二种是线性查找的解法

第三种,基于恢复原始序列的思想。典型的三次翻转思路

	public int minArray(int[] numbers) {
		int index = 0;
		int n = numbers.length;
		while (index < n - 1 && numbers[index + 1] >= numbers[index]) {
			index++;
		}
		reverse(numbers, 0, n - 1);
		reverse(numbers, 0, n - index - 2);
		reverse(numbers, n - index - 1, n - 1);
		return numbers[0];
	}

	private void reverse(int[] n, int b, int e) {
		while (b < e) {
			swap(n, b, e);
			b++;
			e--;
		}
	}

	private void swap(int[] arr, int a, int b) {
		int temp = arr[a];
		arr[a] = arr[b];
		arr[b] = temp;
	}
	
    public int minArray_2(int[] numbers) {
    	Arrays.sort(numbers);
    	return numbers[0];
    }
发布了272 篇原创文章 · 获赞 7 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/m0_37302219/article/details/105504500