二分查找(去哪儿校招题)
2016-07-05 22:59
330 查看
二分查找
1、题目:对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。
给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
测试样例:
[1,3,5,7,9],5,3
返回:1
2、代码:
#include <iostream> #include <vector> using namespace std; int getPos(vector<int> A, int n, int val) { /*int p=n/2,x=0,y=n-1; while (p) { if (A[p] < val) { x = p; } else if (A[p] > val) { y = p; } else { for (int i = p - 1;i >= 0;--i) { if (A[i] != A[i + 1]) { return i + 1; } } } if (p == x + (y - x) / 2||x+(y-x)/2==0) { if (A[n- 1] == val) { return n-1; } else if (A[0] == val) { return 0; } } else { p = x + (y - x) / 2; } } return -1;*/ int x = 0, y = n - 1, p = (x + y) / 2;//修改后的代码 while (x <= y) { if (A[p] < val) { x = p + 1; } else if (A[p] > val) { y = p - 1; } else { for (int i = p - 1;i >= 0;--i) { if (A[i] != A[i + 1]) { return i + 1; } } return 0; } p = (y + x) / 2; } return -1; } int main() { int n, value,a; cin >> n >> value; vector<int> v(n); for (int i = 0;i < n;++i) { cin >> a; v[i] = a; } cout << getPos(v, n, value) << endl; system("pause"); return 0; }
3、总结:
不知道第一次怎么就AC了,看了别人代码后觉得自己的代码写得不行啊,又改了一波,还在有相同值时候,返回第一个索引卡了一下,如果一直找到索引0时就返回0。
4、结果:
输入个数n,查找的值value,数组。
相关文章推荐
- C++二分查找在搜索引擎多文档求交的应用分析
- C语言编程中实现二分查找的简单入门实例
- C#二分查找算法实例分析
- 二分查找算法在C/C++程序中的应用示例
- 在MySQL中实现二分查找的详细教程
- Java实现二分查找算法实例分析
- Python基于二分查找实现求整数平方根的方法
- python二分查找算法的递归实现方法
- Python二分查找详解
- 简介二分查找算法与相关的Python实现示例
- python二分查找算法的递归实现方法
- Python基于二分查找实现求整数平方根的方法
- 我是一个线程(很形象的说法,值得收藏)
- 漫谈递归:二分查找算法的递归实现
- 二分查找
- [LeetCode] Find Minimum in Rotated Sorted Array
- 折半查找法
- "二分查找(Binary Search)"与"斐波那契查找(Fibonacci Search)"
- 二分查找
- C#版二分查找(代碼)