一个排好序的数组,找出两数之和为M的所有组合

网上看到这个面试题,自己琢磨了下,写了几个比较简单的解决方法,请各位大虾给出自己的理解,最好能给出更为简单的解决办法

 

 

package com.liuc.test;

//一个排好序的数组,找出两数之和为M的所有组合 这里设置M为100,可以将100替换为想要让求的和
public class SumM {

	public static int[] arr = { 1, 3, 5, 7, 9, 14, 23, 70, 80, 93, 95, 100,200, 300 };
	public static int count1 = 0;
	public static int count2 = 0;
	public static int count3 = 0;

	public static void main(String[] args) {
		// 1、纯for循环
		for (int i = 0; i < arr.length; i++) {
			for (int j = i + 1; j < arr.length; j++) {
				count1++;
				if (arr[i] + arr[j] == 100) {
					System.out.println(arr[i] + ":" + arr[j]);
				}
			}
		}
		//卡住一个端,左端只有小于M/2才会判断
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] <= 100 / 2) {
				for (int j = i + 1; j < arr.length; j++) {
					count2++;
					if (arr[i] + arr[j] == 100) {
						System.out.println(arr[i] + ":" + arr[j]);
					}
				}
			}
		}
		//卡住一个端,左端只有小于M/2,右端大于M/2才会判断
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] <= 100 / 2) {
					for (int j = i + 1; j < arr.length; j++) {
						if (arr[j] >= 100 / 2) {
							count3++;
							if (arr[i] + arr[j] == 100) {
								System.out.println(arr[i] + ":" + arr[j]);
							}
					}

				}
			}
		}
		System.out.println("count1=" + count1);
		System.out.println("count2=" + count2);
		System.out.println("count3=" + count3);
	}

}
 

结果:

 

5:95

7:93

5:95

7:93

5:95

7:93

count1=91

count2=70

count3=49

 

 

 

 

你可能感兴趣的:(数组)