版权声明:本文为博主原创文章,转载请注明作者与出处,http://blog.csdn.net/lixingtao0520 https://blog.csdn.net/lixingtao0520/article/details/78876492
package com.xtli.controller.leetCode;
import java.util.HashMap;
import java.util.Map;
/*
* 排好序的数组中,找出两数之和为m的所有组合。
*/
public class APlusBEqualMInArray {
public static void main(String[] args) {
int[] a = {1,2,2,3,3,4,5,6};
int m = 6;
//normal(a, m);
better(a,m);
}
//正确思路
private static void better(int[] a, int m) {
int start = 0;
int end = a.length-1;
while(start<end) {
if(a[start]+a[end] == m) {
System.out.println(a[start]+","+a[end]);
start++;
end--;
} else if(a[start]+a[end] > m) {
end--;
} else if(a[start]+a[end] < m) {
start++;
}
}
}
//一般思路
private static void normal(int[] a, int m) {
Map<Integer,Integer> b = new HashMap<Integer, Integer>();
for(int i = 0;i < a.length;i++) {
for(int j = 0;j<a.length;j++) {
if(i!=j&&(a[i]+a[j]==m)) {
if(a[i]>=a[j]) {
b.put(a[i], a[j]);
} else {
b.put(a[j], a[i]);
}
break;
}
}
}
for(int t : b.keySet()) {
System.out.println(t+","+b.get(t)+";");
}
}
}