【小米笔试题】二分查找算法的变形
2015-10-04 15:32
543 查看
一个有序数组的元素经过循环移动,元素的顺序可能变为“3 4 5 6 7 1 2”。怎样才能找出数组中最小的那个元素?假设数组中的元素各不相同。
方法一:(暴力遍历)时间复杂度o(n)
数组遍历,寻找逆序的元素
方法一:(暴力遍历)时间复杂度o(n)
数组遍历,寻找逆序的元素
// 暴力遍历,时间复杂度o(n) for(int i=0; i<n.length; i++) { if(n[i]>n[i+1]) { System.out.println("最小值为:" + n[i+1]); break; } }方法二:通过二分查找,确定范围。再根据转折点的特性:比前小,比后小,确定转折点。时间复杂度为,log2(n)
package XiaoMi; import java.util.Scanner; public class test9 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan = new Scanner(System.in); String str = scan.nextLine(); // System.out.println(str); // 用子串实现-转换为数组 int[] n = new int[str.length()]; for (int i = 0; i < str.length(); i++) { n[i] = Integer.parseInt(str.substring(i, i + 1)); // 很有用 } /* * // 暴力遍历,时间复杂度o(n) for(int i=0; i<n.length; i++){ if(n[i]>n[i+1]) { * System.out.println("最小值为:" + n[i+1]); break; } } */ /* * int temp =0; for(int i=0,m=(n.length+1)/2; i<m; i++ ){ int b = * n.length-i-1; int a = 0; * * if(n[i]>n[b]){ //非顺序 temp = (n.length+1)/2; if(n[temp]>n[b]) { temp = * ()/2; }else{ * * } } } */ /*int num = 1; //要查找的元素 int left = 0; int right = n.length - 1; for (int i = 0, m = (n.length + 1) / 2; i < m; i++) { if (n[(left + right) / 2] == num) { System.out.println("位置索引:" + (left + right) / 2); break; } if (n[(left + right) / 2] > num) // 在左边 { right = (left + right) / 2; } else { left = (left + right) / 2; } }*/ //int num = 1; //要查找的元素 int left = 0; int right = n.length - 1; for (int i = 0, m = (n.length + 1) / 2; i < m; i++) { if (n[(left + right) / 2] < n[(left + right) / 2 + 1] && n[(left + right) / 2] < n[(left + right) / 2 - 1] ) { System.out.println("位置索引:" + (left + right) / 2); break; } if (n[(left + right) / 2] < n[left]) // 在左边 { right = (left + right) / 2; } else { left = (left + right) / 2; } } } public static void search(int m, int n) { } }运行结果:
3456712 位置索引:5
相关文章推荐
- 抽象类(abstract)与接口(interface)
- codeforce 583D Once Again... - 最长上升子序列
- 对称加密(Des)
- 汉字转整数,比系统简单易用!a2iLxx (覆盖物 16十六进制,VC6亲测可用)请提供意见~
- 定制控件Custom Components
- POJ 1251 最小生成树
- 约瑟夫环问题
- C语言中需要注意的小知识(一)
- codeforces 358D D. Dima and Hares(dp)
- 外观模式
- D - Silver Cow Party
- 9月28-10月4日(20小时,剩3450小时)
- 为Android的WebView添加播放音乐的接口供javascript调用
- html页面自动跳转
- 关于wxPython中的TextCtrl响应失去焦点事件后不能再次编辑或出现不正常现象的解决办法
- unity3d Mecanim animator系统
- 唤醒 -- try_to_wake_up() http://blog.csdn.net/linux__kernel/article/details/1476795
- hdu 1075 What Are You Talking About map
- 【转】每天一个linux命令(61):wget命令
- 118. Pascal's Triangle (Graph; WFS)