给出一个数和一个有序数组,找出该数组中之和等于该数的两个数
来源:互联网 发布:2017网络水军招募 编辑:程序博客网 时间:2024/04/29 18:00
今天写的一个版本:
1、有序数组,先写一个二分查找的方法
private static int[] erfen(int[] a,int left,int right,int num) {//left:数组a的左边界//right:数组a的右边界//num:目标数//返回int[0]是是否找到了该数,1为找到了,0为未找到;int[1]是如果找到了则返回改数的序号,如果未找到则返回离改数最近的比改数小的数的序号int[] res=new int[2];int mid = (right+left)/2;if(num==a[mid])res[0]=1;while(mid<right&&mid>left&&num!=a[mid]){if(num>a[mid])left=mid;else if(num<a[mid])right=mid; mid = (right+left)/2;if(num==a[mid])res[0]=1;}res[1]=mid;return res;}
2、调用以上方法
public static int[] twoSum(int[] nums, int target) {int[] res=new int[2];if(nums.length>1){int[] erfen = new int[2];erfen = erfen(nums,0,nums.length,target);//先使用一次二分查找,确定查找的右边界int right = erfen[1];for(int i = 0 ; i <=right ; i++){int second = target-nums[i];int[] erfen1 = new int[2];erfen1 = erfen(nums,i,right+1,second);if(erfen1[0]==0){right=erfen1[1];//更新右边界}else{res[0]=i+1;res[1]=erfen1[1]+1; break;}}}return res;}
3、写一个测试的主方法
public static void main(String[] args) {int[] a = new int[]{2,7,11,15,16};int target = 26;int[] b = new int[2];b=twoSum(a,target);for(int i:b){System.out.println(i);}}
有待继续优化。。。。。。
0 0
- 给出一个数和一个有序数组,找出该数组中之和等于该数的两个数
- 找出一个有序数组中任意2数之和等于给出的第三个数
- 一个有序数组中找出两个数,使得两个数的和等于X的C++实现源代码
- 判断一个有序数组中是否有两个数的和等于给定的数
- 找出有序数组中和等于指定数的两个数
- 有序数组中两个数的和等于一个输入值的函数
- 快速找出一个数组中的两个数字,使两个数之和 等于一个已给定的值
- 一个无序数组中两个数之和等于给定的值sum
- 找出数组中两个数之和为指定的数
- 数组中存放0到n中的缺少一个数的连续数,找出该缺少的数
- C语言向有序数组中插入一个数使该数组仍保持有序
- 关于一个数组中两个数的和等于给定数的问题
- 在数组中求出两个数,使他们的和等于给定的一个数
- 数组两个数之和,等于给定数
- 有15个数存放在一个数组中,输入一个数,要求用折半法找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。以15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。
- 有十个数按从大到小的顺序存放在一个数组中,输入一个数,要求找出该数是数组中的第几个元素。如果该数不在数组中,则打印出“无此数”
- 查找一个数是否存在于一个数组中。该数组分两段有序,第一段的数都大于第二段的数。
- 给一个有序数组和一个数s,求数组中两数和等于s的组合
- Android APK的签名与重新签名
- C/C++宏的使用总结
- HDU-1059 Dividing(DP)
- 给10^7个数据量的磁盘文件排序
- div+css之清除浮动
- 给出一个数和一个有序数组,找出该数组中之和等于该数的两个数
- 菜单点击 显示和隐藏
- 使用jdbc连接mysql数据库
- ZOJ 3866 Cylinder Candy (浙大校赛+积分应用)
- Python之imp模块
- OpenCV getTickCount统计代码运行时间
- 查看linux是多少位的几位方法:
- java实现极简单的 TXT小说阅读器(第四版)
- 两种方式写配置