LeetCode 문제 십오 내에서 해결 : 네와 숫자의

이름

네 개의 요소 A, B, C가있는 경우, 정수와 목표 nums 대상의 N 어레이 주어지고, D nums는 + B + C + D가 목표 값과 동일하게되도록 결정? 모두 충족에게 쿼드의 상태를 확인하고 반복하지 않습니다.

주 : 대답은 중복 쿼드을 포함 할 수 없습니다.

예 :

给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0

满足要求的四元组集合为:
[
  [-1,  0, 0, 1],
  [-2, -1, 1, 2],
  [-2,  0, 0, 2]
]

분석

걷기 목표 값을 뺀 값의 값에 도착하면서 다시 기초 앞으로 뒤로 이동을 계속하거나 이전과 두 개의 포인터 후에는, 일반적인 문제 해결 방안이며, 이전 단계의 값에 추가하세요 그 다음,이 경우에는 네 개의 값을 만족하고, 0이다.

대답

public class Solution {
    public List<List<Integer>> fourSum(int[] num, int target) {
		List<List<Integer>> rst = new ArrayList<List<Integer>>();
		Arrays.sort(num);

		for (int i = 0; i < num.length - 3; i++) {
			if (i != 0 && num[i] == num[i - 1]) {
				continue;
			}

			for (int j = i + 1; j < num.length - 2; j++) {
				if (j != i + 1 && num[j] == num[j - 1])
					continue;

				int left = j + 1;
				int right = num.length - 1;
				while (left < right) {
					int sum = num[i] + num[j] + num[left] + num[right];
					if (sum < target) {
						left++;
					} else if (sum > target) {
						right--;
					} else {
						ArrayList<Integer> tmp = new ArrayList<Integer>();
						tmp.add(num[i]);
						tmp.add(num[j]);
						tmp.add(num[left]);
						tmp.add(num[right]);
						rst.add(tmp);
						left++;
						right--;
						while (left < right && num[left] == num[left - 1]) {
							left++;
						}
						while (left < right && num[right] == num[right + 1]) {
							right--;
						}
					}
				}
			}
		}

		return rst;
	}
}
게시 88 개 원래 기사 · 원 찬양 49 ·은 10 만 + 조회수

추천

출처blog.csdn.net/Diamond_Tao/article/details/103395502