微软面试100题-69
2016-05-14 22:52
369 查看
69.旋转数组中的最小元素(数组、算法)。
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,
输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。
分析:这道题最直观的解法并不难。从头到尾遍历数组一次,就能找出最小的元素,
时间复杂度显然是O(N)。但这个思路没有利用输入数组的特性,我们应该能找到更好的解法。
![](http://img.blog.csdn.net/20160515165729555?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
69.旋转数组中的最小元素(数组、算法)。
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,
输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。
分析:这道题最直观的解法并不难。从头到尾遍历数组一次,就能找出最小的元素,
时间复杂度显然是O(N)。但这个思路没有利用输入数组的特性,我们应该能找到更好的解法。
package com.algo.ms; public class MinFromRotateArray67 { /* * 69.旋转数组中的最小元素(数组、算法)。 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转, 输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。 分析:这道题最直观的解法并不难。从头到尾遍历数组一次,就能找出最小的元素, 时间复杂度显然是O(N)。但这个思路没有利用输入数组的特性,我们应该能找到更好的解法。 */ public int binarySearch(int[] arr, int start, int end){ int mid = start + (end - start + 1)/2; if(start == end) return arr[start]; if(end - start == 1) { if (arr[start] < arr[end]) return arr[start]; else return arr[end]; } if(arr[start] < arr[mid] && arr[mid] > arr[end]){ return binarySearch(arr, mid, end); } else if(arr[start] > arr[mid] && arr[mid] < arr[end]){ return binarySearch(arr, start, mid); } else if(arr[start] < arr[mid] && arr[mid] < arr[end]){ return binarySearch(arr, start, mid); } return arr[start]; } public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = {1, 2, 3, 4, 5}; MinFromRotateArray67 min = new MinFromRotateArray67(); System.out.println(min.binarySearch(arr, 0, arr.length - 1)); } }
相关文章推荐
- Java程序员的日常 —— static的用法讲解实践
- 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
- 机器学习常见面试题
- 软件众包 业余主义的复兴
- iOS面试题 汇总
- 软件众包 业余主义的复兴
- Java多线程和并发基础面试问答
- Android 面试题
- Java 常用排序算法/程序员必须掌握的 8大排序算法
- 65 个职场很有技巧的回答
- Java多线程和并发基础面试问答
- web前端面试题集锦
- java面试
- 阿里巴巴前端岗位面试题
- 【36】按层打印二叉树
- iOS_面试题
- 程序员常用网站
- 事务-程序员的必经之路
- 软考程序员随笔-----7
- 笔试面试题12--字符串拷贝、链接、比较无库函数实现