数组里找到和最接近于0的两个值?或者和等于0的两个值
来源:互联网 发布:关注黄金价格的软件 编辑:程序博客网 时间:2024/06/14 00:35
与“寻找数组中满足和为定值的两个数”问题的思路一样:
首先先排序;
然后定义两个首尾指针left、right,逐次判断a[i]+a[j]?=0:
①如果某一刻a[left]+a[right]>0, 和应该要变小,则left不动,right--,
②如果某一刻a[left]+a[right]<0, 和应该要变大,则left++,right不动。
③如果某一时刻a[left]+a[right]=0,则直接退出循环。
同时还要注意,题目还要求最接近0的两个数?
所以定义Diff变量保存两数和与0最小的距离,first和second变量保存与0有最小距离的两个数的数组下标。
当a[right]+a[left]>0或者a[right]+a[left]<0时,要判断当前这两个数和与0的距离是否还要小于Diff,如果是则要更新Diff、first、second三个变量。
public static void zero(int[] a){Arrays.sort(a); int left = 0, right = a.length-1; int Diff = a[right]+a[left];int first=-1,second=-1;while(left<right){if(a[right]+a[left]>0){if(Math.abs(a[right]+a[left])<=Math.abs(Diff)){Diff = a[right]+a[left];first = left;second = right;}right--;}else if(a[right]+a[left]<0){if(Math.abs(a[right]+a[left])<=Math.abs(Diff)){Diff = a[right]+a[left];first = left;second = right;}left++;}else{first = left;second = right;break;}}System.out.println("满足条件的两个数是"+a[first]+" "+a[second]);}
0 0
- 数组里找到和最接近于0的两个值?或者和等于0的两个值
- 数组里找到和最接近于0的两个值。
- 有序数组中两个数的和等于一个输入值的函数
- 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target(容易)
- 在升序数组中查找和等于给定值的两个数
- 判断数组中是否存在和等于给定值的两个数
- 给定一个数组和一个数字,给定的数组里是否存在两个数字之和等于给定的数字
- (1/500)找出和等于给定值的两个数
- 2N的数组分割成两个和最接近的子数组
- 求解一个数组里等于给定整数和的两个数的O(n)时间复杂度算法
- 求解一个数组里等于给定整数和的两个数的O(n)时间复杂度算法
- 将数组划分为两个元素和最接近的子数组
- 最接近给定值的子数组和
- 子数组的和与0最接近
- leetcode-最接近0的子数组和
- 质数的判断然后随机的找到一个偶数等于两个素数的和
- 找出和值等于指定值的元素,如有序数组{1,2,6,23,43,64},求和等于25的两个和数则将是元素2和23,时间复杂度是0(n)。
- 求解数组中任意两个元素的和最接近某一个数
- apklug插件托管服务开发教程之下载插件-02
- rstplib源码分析---快速生成树之通用状态机
- 云计算平台
- ZOJ-1985
- apklug插件托管服务开发教程之查询已安装插件版本状态-03
- 数组里找到和最接近于0的两个值?或者和等于0的两个值
- 黑马程序员--集合小结
- 页面之间值传递
- viemu破解
- apklug插件托管服务开发教程之上传应用到云端-04
- VS2008下QT开发环境搭建
- OCP 1Z0 051 81
- 云计算与大数据的价值
- getText()之For input string:""