9.9递归和动态规划(三)——魔术索引
来源:互联网 发布:crypto js 下载 编辑:程序博客网 时间:2024/06/05 06:42
/**
* 功能:在数组A[0…n-1]中,有所谓的魔术索引,满足条件A[i]=i。
* 给定一个有序整数数组,元素值各不相同,找出一个魔术索引。
*
* 进阶:如果数组元素有重复值,如何处理
方法二:
* 功能:在数组A[0…n-1]中,有所谓的魔术索引,满足条件A[i]=i。
* 给定一个有序整数数组,元素值各不相同,找出一个魔术索引。
*
* 进阶:如果数组元素有重复值,如何处理
*/
两种方法:
方法一:
//穷举法public static int getMagicIndex(int[] array){for(int i=0;i<array.length;i++){if(array[i]==i)return i;}return -1;}
方法二:
//二分查找法/** * 思路:利用数组有序的特点,运用模式匹配法。 * @param array * @return */public static int getMagicIndex2(int[] array){return judge(array,0,array.length-1);}public static int judge(int[] array,int start,int end){if(end<start||start<0||end>array.length)return -1;int mid=(start+end)/2;if(array[mid]==mid)return mid;else if(array[mid]<mid)return judge(array,mid+1,end);else return judge(array,start,mid-1);}
进阶:
//进阶:如果数组元素有重复值public static int getMagicIndex3(int[] array){return judge2(array,0,array.length-1);}public static int judge2(int[] array,int start,int end){if(end<start||start<0||end>array.length)return -1;int midIndex=(start+end)/2;int midValue=array[midIndex];if(midIndex==midValue)return midIndex;//搜索左半部分 int leftIndex=Math.min(midIndex-1, midValue);int left=judge2(array,start,leftIndex);if(left>=0)return left;//搜索右半部分int rightIndex=Math.max(midIndex+1, midValue);int right=judge2(array,rightIndex,end);return right;}
0 0
- 9.9递归和动态规划(三)——魔术索引
- 程序员面试金典: 9.9 递归和动态规划 9.3魔术索引
- 动态规划(三)暴力递归的优化之路——数字矩阵的最小路径和
- 牛客网递归训练——魔术索引1
- 9.9递归和动态规划(一)——小孩上楼梯的方式的种类
- 9.9递归和动态规划(四)——返回某集合的所有子集
- 9.9递归和动态规划(五)——确定某字符串的所有排列组合
- 9.9递归和动态规划(九)——N皇后
- 9.9递归和动态规划(十)——堆箱子
- 9.9递归和动态规划(十二)——小鸡吃米
- 动态规划和递归
- 递归和动态规划
- 动态规划和递归
- 递归和动态规划
- 递归和动态规划
- 递归和动态规划
- 《C算法》——递归和动态规划
- 《C算法》——递归和动态规划[转贴]
- 数据结构学习笔记(二)---单链表
- FZU - 2125 - 简单等式
- django 快速实现文件上传
- jnative 从指针中获得传出值
- https原理及tomcat配置https方法
- 9.9递归和动态规划(三)——魔术索引
- Problem A. Automated Telephone Exchange----(2015 summer training #5)
- scala实现设计模式之建造者模式
- pom.xml详解
- Java--异常
- android.graphics.PorterDuff,android.graphics.Insets注释翻译
- 配置tomcat
- 《Objective-C基础教程》第6章 源文件组织
- mac 下面快速安装mongodb