二分查找
来源:互联网 发布:淘宝倒卖游戏币犯法吗 编辑:程序博客网 时间:2024/06/09 13:56
题目描述
对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。
给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
测试样例:
[1,3,5,7,9],5,3
返回:1
<分析>:
1.题目没给出数组是升序还是降序,故需要判断是升序还是降序
2.需要返回查找元素第一次出现的位置,那么当找到时,需要判断是否是第一次出现
package com.ex.string;/** * * @author zy * @date 2017年10月18日 下午2:59:23 * @Decription 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 * 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。 * 若该元素出现多次,请返回第一次出现的位置。 */public class Ex10 { public int getPos(int[] A, int n, int val) { // write code hereif (A==null || n==0) {return -1;}int low=0;int high=n;//升序if (A[0]<A[n-1]) {while(low<=high){int mid=(low+high)/2;if (A[mid]==val) {return findFirstPos(A, val, mid);}else if (A[mid]>val) {high = mid-1;}else {low = mid+1;}}}//降序if (A[0]>A[n-1]) {while(low<=high){int mid=(low+high)/2;if (A[mid]==val) {return findFirstPos(A, val, mid);}else if (A[mid]>val) {low=mid+1;}else {high=mid+1;}}} return -1; } private int findFirstPos(int[] A,int val,int position){ while(position>=0 && A[position]==val){ position--; } return position+1; }}
阅读全文
0 0
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- matconvnet用到的 matlab函数
- java 使用异或运算交换
- 【error】postgresql relation does not exist
- tf.slim使用方法
- 连接mysql数据库
- 二分查找
- Eclipse中多行代码整体向左向右缩进快捷键
- 利用JQ实现简单的拖曳效果
- plsql工具 oracle怎样创建表空间和用户
- springmvc国际化设置
- Ration与深蓝的下午茶(二):深蓝临危不乱的秘密——时间片
- 拼凑的论文进行知网查重通过率高吗?
- datepicker设置插件显示位置
- PhpStorm 快捷键大全 PhpStorm 常用快捷键和配置