https://leetcode.com/problems/3sum
package leetcode;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
/*
* 문제주소 : https://leetcode.com/problems/3sum/
* 난이도 : 미디움
* 문제 내용 요약 : 주어진 배열에서 3개 숫자를 꺼냄. 3개 숫자를 더해서 0이 되는 경우의 집합 구하기
*/
public class L15ThreeSum {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> answer = new LinkedList<>();
//정렬
Arrays.sort(nums);
for(int i = 0; i<nums.length-2; i++){
if(nums[i] > 0) break;
// 조합 중복값 제외를 위한 부분
if(i>0 && nums[i] == nums[i-1]) continue;
int j = i+1; int k = nums.length-1;
// j는 1씩 증가, k는 1씩 줄여가면서 nums[i]와 더했을때 0이 되는 값을 찾아나감.
while(j<k){
int sum = nums[i]+nums[j]+nums[k];
if(sum == 0){
answer.add(Arrays.asList(nums[i], nums[j], nums[k]));
j++; k--;
// 조합 중복값 제외를 위한 부분
while(j < k && nums[j]==nums[j-1]) j++;
while(j < k && nums[k]==nums[k+1]) k--;
}
if(sum > 0) k--;
if(sum < 0) j++;
}
}
return answer;
}
}
'알고리즘 > 코딩테스트' 카테고리의 다른 글
[leetcode] Maximum Product Subarray (0) | 2022.04.22 |
---|---|
[leetcode] number of 1 bits (0) | 2022.04.21 |
[SQL] leetCode Department Top Three Salaries (0) | 2022.03.24 |
[SQL] leetcode Second Highest Salary (0) | 2022.03.22 |
[SQL] leetcode Trips and Users (0) | 2022.03.21 |