二分查找变形1
2016-09-07 15:30
281 查看
对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。
给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
测试样例:
[1,3,5,7,9],5,3
返回:1
就是数组可以由相同的书数,但是保证一定能找得到,
要点:尽量不要再bs()函数里面改,让bs()函数维持原样,在getPos()方法return之前加上相应的增强方法
给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
测试样例:
[1,3,5,7,9],5,3
返回:1
import java.util.*; public class BinarySearch { public int getPos(int[] A, int n, int val) { // write code here int rst = bs(A, 0, n-1, val); for(int i=rst-1; i>=0; i--) if(A[i] == val) rst--; else break; return rst; } public int bs(int[] A, int lo, int hi, int val){ int mid = 0; while(lo <= hi){ mid = lo + (hi - lo) / 2; int cmp = A[mid] - val; if(cmp > 0) hi = mid - 1; else if(cmp < 0) lo = mid + 1; else return mid; } return lo; } }
就是数组可以由相同的书数,但是保证一定能找得到,
要点:尽量不要再bs()函数里面改,让bs()函数维持原样,在getPos()方法return之前加上相应的增强方法
相关文章推荐
- 算法-分割有序数组后查值-二分查找的变形
- 二分查找及其变形总结
- 二分查找及其变形
- Find Peak Element——二分查找的变形
- 二分查找及其变形算法
- 一种二分查找变形
- 二分查找及其变形
- 二分查找之变形
- 二分查找的变形应用
- poj 1064 二分查找变形—判定并找到可行解
- 你真的能搞定二分查找吗 — 二分查找及变形
- 你真的能搞定二分查找吗 — 二分查找及变形
- 2014-04-04 循环递增数组查找元素(二分变形思想,百度面试题)
- 二分查找的一点变形
- leetcode旋转数组查找 二分查找的变形
- 面试题_二分查找及其变形
- Find Minimum in Rotated Sorted Array I&&II——二分查找的变形
- 变形的二分查找
- 二分查找极其变形算法
- 微软的二分查找变形题