java version : 查找有序数组中等于给定值的2个数

//查找有序数组中等于给定值的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");
}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值