java version : 查找有序数组中等于给定值的2个数
2014-07-30 21:58
330 查看
//查找有序数组中等于给定值的2个数,如果原数组没有排序,可以先排序,这样的情况 ,最好的效率应该是 O(nlogn +n),即O(nlogn); private static void findNums(int data[], int sum){ if(null == data || data.length < 2){ return; } int len = data.length; int front = 0; int end = len -1; int curSum = 0; while(front < end){ curSum = data[front] + data[end]; if(sum == curSum){ System.out.println("num1="+data[front] +",num2="+data[end]);
break; } if(sum > curSum){ front++; }else { end--; } } } 看到LeetCode的 解决思想,但适用于结果只有一个的情况; /** * 适合于 结果只有一对的情况 * @param data * @param sum */ public static void findNums2(int data[],int sum){ int len ; if(null == data || (len=data.length)<1 ){ return; } int tempValue; //用于存储结果, 用数组也Ok HashMap<Integer,Integer> result = new HashMap<Integer,Integer>(); //用于存储遍历过的值 HashMap<Integer,Integer> valueMap = new HashMap<Integer,Integer>(); for(int i=0; i<len; i++){ tempValue = sum - data[i]; if(valueMap.containsKey(tempValue)){ //存储index,也可存储值 result.put(valueMap.get(tempValue), i); continue; } valueMap.put(data[i], i); } valueMap = null; //输出结果; if(result.size() < 1){ System.out.print("no value"); return; } for(Entry<Integer, Integer> entry : result.entrySet()){ System.out.print("num1="+data[entry.getKey()] +",num2="+data[entry.getValue()]+"\n"); } }
相关文章推荐
- Java实现——查找数组中连续元素的和等于给定数的子数组
- 查找有序数组中等于给定值的两个数
- Leet Code 1 Two Sum - 查找数组中和等于给定值的两个数 - Java
- java数据结构与算法-有序数组二分查找
- 二分查找:在有序数组中搜索大于等于x的数的最小下标
- leetcode1:在数组中找2个数的和正好等于一个给定值--哈希
- 二维有序数组查找给定值
- 判断有序整型数组中是否存在两数,相加之和等于给定的任意整数
- 在一个有序的旋转数组中,查找给定值
- (leetcode)1. 查找数组中两个数之和为给定值Two Sum---Java
- 在一个循环有序数组里查找一个给定的值是否存在
- LeetCode 34 Search for a Range (有序数组中查找给定数字的起止下标)
- Java--给定两个有序的数组,长度分别为m和n,求这两个数组中的第K个元素。
- 判断一个有序数组中是否有两个数的和等于给定的数
- java每日一题:给定一个整数数组arr和整数target,返回两个索引值,使得这两个索引值对应的整数的和等于target。(arr中有且仅有一组)
- leetcode-java.T001_TwoSum 给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字
- (java)二维有序数组中查找元素
- 在升序数组中查找和等于给定值的两个数
- 给定一个数组,从中查找是否存在两个数的和等于一个给定的x
- 程序员面试题目总结--数组(二)【二分查找、找出给定数字出现次数、两个有序整型数组交集、找出数组中唯一的重复元素、判断数组中的数值是否连续相邻】