给定一个值S,在有序数组中找出两个元素A和B,使 A+B = S.
2014-10-10 21:06
459 查看
在网上看到过一个面试题,感觉挺有意思,看别人的代码写的逻辑不够谨慎,重写了一个,较真了又。。。
package com.array7.algorithm; public class AlgorithmTest { public static void main(String[] args) { int[] arr = {2 ,4 ,5 ,8 ,10 ,12 ,13 ,16 ,17,Integer.MAX_VALUE }; int sum = 13; String result = getSumElements(arr,sum); System.out.println(result); int[] arr2 = {-21 ,-20 ,-15 ,-4 ,-1 ,0 , 2, 13 ,16 ,17,Integer.MAX_VALUE }; int sum2 = -13; result = getSumElements(arr2,sum2); System.out.println(result); } public static String getSumElements(final int[] arr, final int sum) { if (arr == null || arr.length < 2) { throw new IllegalArgumentException("参数不合法..."); } int min = 0; int max = arr.length - 1; long tempSum = 0L; String result = "not found"; while (min < max) { tempSum = new Long(arr[min]) + new Long(arr[max]); // 防止数值溢出,保证数据健壮性 if (tempSum > sum) { max--; } else if (tempSum < sum) { min++; } else { result = arr[min] + "," + arr[max]; break; } } return result; } }
相关文章推荐
- 给定一个值S,在有序数组中找出两个元素A和B,使 A+B = S.
- 程序员面试题目总结--数组(二)【二分查找、找出给定数字出现次数、两个有序整型数组交集、找出数组中唯一的重复元素、判断数组中的数值是否连续相邻】
- 求一个值是否是一个给定有序数组中两个元素的和
- 程序员面试金典——解题总结: 9.17中等难题 17.6给定一个整数数组,编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n - m越小越好,也就是说,找出
- 有一个整数数组,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,也就是说,找出符合条件的最短序列。 给定一个int数组A和数组的大小n,请
- 给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组 最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上
- 在给定的数组中找出两个元素和为给定值的所有元素对
- 找出和值等于指定值的元素,如有序数组{1,2,6,23,43,64},求和等于25的两个和数则将是元素2和23,时间复杂度是0(n)。
- 快速找出一个数组中的两个数,让这两个数字之和定于一个给定的值(编程之美2.12)
- 【一个小实验】找出两个数组中相同的元素
- 求给定的两个数组的公共元素,并将其返回为一个数组
- 【Java】给定一个有序整数数组,元素各不相同且按照升序排列,编写一个算法,创建一个高度最小的二叉查找树
- 剑指offer中在一个有序数组中找出和为s的两个数字
- @陈利人 : #面试题#给定两个数组X和Y,元素都是正数。请找出满足如下条件的数对的数目: x^y > y^x,即x的y次方>y的x次方;x来自X数组,y来自Y数组
- 两个有序数组,判断一个给定的数p在合并后的位置
- Java--给定两个有序的数组,长度分别为m和n,求这两个数组中的第K个元素。
- 一个数组中,除两个元素其余都出现了两次,找出这两个元素
- 快速找出一个数组中的两个数字,其和等于给定值。
- 一个数组中,除两个元素其余都出现了两次,找出这两个元素
- 找出一个整形数组的所有元素除了一个、两个、三个元素外,其余全是成对出现的,找出这些元素