[Leetcode]1679. Max Number of K-Sum Pairs(x)

2024. 7. 30. 11:16java/javaAlgorithm

1. problem : 

https://leetcode.com/problems/max-number-of-k-sum-pairs/?envType=study-plan-v2&envId=leetcode-75

 

2. solution 1 :

public class Solution {
    public int maxOperations(int[] nums,int k) {
        int count = 0;
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        for (int num : nums) {
            int target = k - num;
            if (hashMap.getOrDefault(target, 0) > 0) {
                count++;
                hashMap.put(target, hashMap.get(target) - 1);
            } else {
                hashMap.put(num,hashMap.getOrDefault(num,0)+1);
            }
        }
        return count;
    }

 쓰인다면, target이라는 key의 value값 -1 (물론 0보다 크다는 전제하에)

안 쓰인다면, num이라는 key를 새로 생성하거나 기존의 value에 +1 

 

3. solution 2 :

class Solution {
    public int maxOperations(int[] nums, int k) {
        Arrays.sort(nums);
        int n = nums.length;
        int maxOps = 0;
        int si = 0;
        int ei = n-1;
        while(si < ei) {
            int sum = nums[si] + nums[ei];
            if(sum == k) {
                maxOps++;
                si++;
                ei--;
            } else if(sum > k) {
                ei--;
            } else {
                si++;
            }
        }
        return maxOps;
    }
}

일단, array를 sort 한 다음, 값이 같다면 start_index, end_index를 안쪽으로 당겨주고, 

sum이 크다면, 큰 값만 안쪽으로 당기기.

sum이 작다면, 작은 값을 안쪽으로 당기기.