K 和数对的最大数目

241 阅读1分钟

给你一个整数数组 nums 和一个整数 k 。

每一步操作中,你需要从数组中选出和为 k 的两个整数,并将它们移出数组。

返回你可以对数组执行的最大操作数。

来源:力扣(LeetCode) 链接:leetcode.cn/problems/ma…

/**
 * 1. 对数组进行排序;
 * 2. 使用双指针,最左侧和最右层相加,然后与k相比较:
 *  1、如果两个数相等,则count + 1;
 *  2、如果k > sum,则sum需要增大,left++;
 *  3、如果k > i,则sum需要减小,right--;
 *
 */
public class MaxOperations {

    public int maxOperations(int[] nums, int k) {
        Arrays.sort(nums);
        int count = 0;
        int left = 0;
        int right = nums.length - 1;

        while(left <= right) {
            if (nums[left] + nums[right] == k) {
                count++;
                left++;
                right--;
            } else if(nums[left] + nums[right] < k) {
                left++;
            } else {
                right--;
            }
        }
        return count;
    }
}