Leetcode 1679. K 和数对的最大数目 双指针法

news/2025/2/21 8:38:06/

https://leetcode.cn/problems/max-number-of-k-sum-pairs/

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

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

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

示例 1:

输入:nums = [1,2,3,4], k = 5
输出:2
解释:开始时 nums = [1,2,3,4]:

  • 移出 1 和 4 ,之后 nums = [2,3]
  • 移出 2 和 3 ,之后 nums = [] 不再有和为 5 的数对,因此最多执行 2 次操作。

示例 2:

输入:nums = [3,1,3,4,3], k = 6
输出:1
解释:开始时 nums = [3,1,3,4,3]:

  • 移出前两个 3 ,之后nums = [1,4,3] 不再有和为 6 的数对,因此最多执行 1 次操作。

第一种

排序后,双指针

class Solution {public int maxOperations(int[] nums, int k) {// 排序Arrays.sort(nums);// 首 尾指针int i = 0, j = nums.length - 1;int result = 0;while (i < j) {int sum = nums[i] + nums[j];if (sum == k) { // 不需要真移除,只要把两边的指针都挪一位即可。i++; j--; // 刚好相等,让两个指针靠近result++; // 结果+1} else if (sum < k) { // 偏小了,挪动左指针,获得一个更大的数i++;} else {j--; // 偏大了,挪动右指针,获得一个更小的数}}return result;}
}

时间复杂度O(nlogn + n),空间复杂度O(1)。
在这里插入图片描述

第二种

遍历,用map缓存数字

class Solution {public int maxOperations(int[] nums, int k) {int result = 0;HashMap<Integer, Integer> map = new HashMap<>();for (int num : nums) {int target = k - num;Integer x = map.get(target);if (x != null && x > 0) {result++; // 结果+1map.put(target, x-1); // target被用过,所以-1} else {// 没找到合适的数,就暂存当前的num,以便之后使用map.put(num, map.getOrDefault(num,0)+1);}}return result;}
}

时间复杂度O(n),空间复杂度O(n)。
在这里插入图片描述
本文完


http://www.ppmy.cn/news/87226.html

相关文章

路由守卫

// 路由守卫 router.beforeEach((to, from,next) > { // 去哪里 console.log(to) // 从那来 console.log(from) // 继续执行的操作----next 不执行next哪里都进不去&#xff01;&#xff01;&#xff01; // next()-----网页正常跳转 // next(‘/’)–next中的参数是要跳转的…

Python对大量表格文件加以数据截取、逐行求差、跨文件合并等处理的方法

本文介绍基于Python语言&#xff0c;针对一个文件夹下大量的Excel表格文件&#xff0c;基于其中每一个文件&#xff0c;首先依据某一列数据的特征截取我们需要的数据&#xff0c;随后对截取出来的数据逐行求差&#xff0c;并基于其他多个文件夹中同样大量的Excel表格文件&#…

ChatGPT无限可能性:自然语言生成的奥秘

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; ChatGPT无限可能性&#xff1a;自然语言生成的奥秘 数字化时代&#xff1a;跨越语言和文化障碍 冰岛是北大西洋中部的一个岛国&#xff0c;拥有充满活力的科技产业和…

浅浅谈谈ssm的那些事儿外加AOP和DI+DAO思想的理解和处理json数据的第三方工具

MyBatis 一级缓存 默认是打开的 SqlSession级别的缓存&#xff0c;同一个SqlSession的发起多次同构查询&#xff0c;会将数据保存在一级缓存中。 在sqlsession 中有一个数据结构 是map 结构&#xff0c; 这个区域就是一级缓存区域&#xff0c;一级缓存区域中的 key 是由 sql 语…

【遥感图像】目标检测系列.1

目录 Unsupervised Domain Adaptation for Cloud Detection Based on Grouped Features Alignment and Entropy Minimization, TGRS2022 Semi-Supervised Cloud Detection in Satellite Images by Considering the Domain Shift Problem, RS2022 CoF-Net: A Progressive Coa…

非线性系统的线性化与泰勒级数

线性系统与非线性系统的区别 我们在读论文的时候经常会遇到这两个系统&#xff0c;线性系统与非线性系统&#xff0c;这两者之间有什么区别呢&#xff1f; 线性指量与量之间按比例、成直线的关系&#xff0c;在空间和时间上代表规则和光滑的运动&#xff1b;非线性则指不按比…

每日三问-前端(第九期)

2023年5月25日 先来回顾一下昨天的面试题及答案&#xff1a; 问题1&#xff1a;你有没有遇到过令人困惑的 CSS 布局问题&#xff1f;如果有&#xff0c;请分享一个例子&#xff0c;并解释你是如何解决的 对于令人困惑的 CSS 布局问题&#xff0c;例如水平居中元素或自适应布局&…

华为OD机试真题 Java 实现【打印文件】【2023Q1 100分】

一、题目描述 有 5 台打印机打印文件&#xff0c;每台打印机有自己的待打印队列。 因为打印的文件内容有轻重缓急之分&#xff0c;所以队列中的文件有1~10不同的优先级&#xff0c;其中数字越大优先级越高。 打印机会从自己的待打印队列中选择优先级最高的文件来打印。 如果…