2016校招真题
来源:互联网 发布:淘宝分享有赏红包 编辑:程序博客网 时间:2024/05/17 04:31
对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。
给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
测试样例:
[1,3,5,7,9],5,3
返回:1
public class BinarySearch { public static void main(String args[]){ Scanner in=new Scanner(System.in); int n=in.nextInt(); int val=in.nextInt(); int a[]=new int[n]; for(int i=0;i<n;i++){ a[i]=in.nextInt(); } int copya[]=new int[n]; for(int i=0;i<n;i++){ copya[i]=a[i]; } copya=Sort(copya,n); int index=getPos(copya,n,val); if(index==-1){ System.out.println(index); }else{ for(int i=0;i<n;i++){ if(copya[index]==a[i]){ System.out.println(i); break; } } } } //二分查找 public static int getPos(int[] a, int n, int val) { int left=0,right=n-1,mid; while(left<=right){ mid=left+(right-left)/2; if(a[mid]==val) return mid; if(a[mid]>val){ right=mid-1; } if(a[mid]<val){ left=mid+1; } } return -1; } public static int[] Sort(int arr[],int n){ int i,j,v; for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(arr[i]<arr[j]){ v=arr[i]; arr[i]=arr[j]; arr[j]=v; } } } return arr; }}
那个系统我也是醉了,运行结果和它说得一样,它硬是要说我错了,况且是真的没错啊我觉得,心烦意乱。
0 0
- 2016校招真题
- 2016校招真题-懂二进制
- 2016校招真题汇总1:最高分是多少
- 2016校招真题汇总2:简单错误记录
- 2016校招真题汇总3:扑克牌大小
- 2016校招真题在线编程 懂二进制
- 2016校招真题-小米Git(找最近双亲)
- 2016校招真题——发奖金
- 【校招真题】2016 美团 最大差值
- 2016校招真题编程练习——微信红包(腾讯)
- 校招真题 百度 买帽子
- 2017 校招真题(数组)
- 2017校招真题在线编程
- 校招真题-其他-数组单调和
- 校招真题-其他-顺时针旋转矩阵
- 校招真题 美团 棋子翻转
- 校招真题 百度 有趣的排序
- 校招真题-其他-左右最值最大差
- 二分查找
- 数据库sql优化
- 动态规划-计算二项式系数
- spring配置websocket并实现群发/单独发送消息
- 实体间的联系
- 2016校招真题
- iOS Block弱引用
- 使用 SkyEye 模拟 ARM Linux
- 使用JdbcTemplate的execute()方法执行SQL语句
- 《UNIX环境高级编程》第4章 文件和目录
- 一个C语言写的小游戏(flappy bird)
- java保留小数点后几位总结
- 模拟题 疯狂bb的zy prufer序列 DP
- 常用点总结(一)