排好序的数组中,找出两数之和为m的所有组合

版权声明:本文为博主原创文章,转载请注明作者与出处,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)+";");
		}
	}
}

猜你喜欢

转载自blog.csdn.net/lixingtao0520/article/details/78876492