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

news2024/12/22 16:46:38

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++; // 结果+1
                map.put(target, x-1); // target被用过,所以-1
            } else {
                // 没找到合适的数,就暂存当前的num,以便之后使用
                map.put(num, map.getOrDefault(num,0)+1);
            }


        }

        return result;
    }
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/570787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JS】1693- 重学 JavaScript API - Web Storage API

❝ 前期回顾&#xff1a; 1. Page Visibility API 2. Broadcast Channel API 3. Beacon API 4. Resize Observer API 5. Clipboard API 6. Fetch API 7. Performance API ❞ 在 Web 开发中经常需要在客户端保存和获取数据&#xff0c;Web Storage API 提供了一种在浏览器中存储…

【sop】含储能及sop的多时段配网优化模型

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 之前分享了含sop的配电网优化模型&#xff0c;链接含sop的配电网优化,很多同学在咨询如何增加储能约束&#xff0c;并进行多时段的优化&#xff0c;本次拓展该部分功能&#xff0c;在原代码的基础上增加储能模…

Paragon NTFS2023最新mac免费实用工具磁盘工具

mac虽然系统稳定&#xff0c;但在使用过程中也有一些瑕疵&#xff0c;如当mac连接到ntfs格式移动磁盘时&#xff0c;可能会出现移动磁盘无法在mac被正常读写的状况。遇到移动磁盘无法正常读写的状况&#xff0c;我们可以在mac中使用磁盘工具&#xff0c;以使mac获得对ntfs格式移…

Docker实战1-运行前端Vue项目

本次运行了两个项目&#xff0c;一个是开源的镜像&#xff0c;一个是自己的前端项目镜像 1 在docker中运行 keycloak docker run -p 8080:8080 -e KEYCLOAK_ADMINadmin -e KEYCLOAK_ADMIN_PASSWORDadmin quay.io/keycloak/keycloak:21.1.1 start-dev 这个最简单了&#xff0c…

版图设计IC617 virtuoso启动以及smic18mmrf加载库

一. 启动virtuoso 1.1 创建一个目录用于库管理 mkdir pro3 1.2 拷贝.bashrc到工程目录下&#xff0c;.bashrc存在~目录下&#xff0c;是一个隐藏文件&#xff0c;需要用ls -la查看 1.3 执行.bashrc文件 1.4 启动 virtuoso & 1.5 检查库中是否包含系统基本库&#xff0c;如…

【JavaSE】Java基础语法(十三):Java 中的集合(十分全面)

文章目录 List, Set, Queue, Map 四者的区别&#xff1f;集合框架底层数据结构总结ArrayList 和 Vector 的区别ArrayList 与 LinkedList 区别补充内容:RandomAccess 接⼝ArrayList 的扩容机制comparable 和 Comparator 的区别比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同…

Java jdbcTemplate 获取数据表结构

表结构如图 代码 AutowiredJdbcTemplate jdbcTemplate;Testpublic void getColumnNames() throws Exception {String sql "select * from tb_test where 12 ";SqlRowSet sqlRowSet jdbcTemplate.queryForRowSet(sql);SqlRowSetMetaData sqlRsmd sqlRowSet.getMeta…

高手速成 | 过滤器、监听器的创建与配置

本节讲解过滤器、监听器的创建以及监听事件配置示例。 01、过滤器的创建与配置 【例1】创建过滤器及配置过滤规则。 (1) 在Eclipse中新建一个Web项目&#xff0c;取名为Chapt_09。在src目录下&#xff0c;新建一个名为com.test.filter的包。选中该包并按CtrlN组合键&#xf…

Linux之软件包管理

软件包管理 RPM RPM 概述 RPM&#xff08;RedHat Package Manager&#xff09;&#xff0c; RedHat软件包管理工具&#xff0c; 类似windows里面的setup.exe&#xff0c;是Linux这系列操作系统里面的打包安装工具&#xff0c; 它虽然是RedHat的标志&#xff0c; 但理念是通用…

Python自动化对每个文件夹及其子文件夹的Excel表加个表头(Excel不同名且有xls文件)...

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 惟将旧物表深情&#xff0c;钿合金钗寄将去。 大家好&#xff0c;我是皮皮。 一、前言 上一篇文章&#xff0c;我们抛出了一个问题&#xff0c;这篇文章…

【iOS锁_@synchronized源码浅析】

文章目录 前言synchronized介绍加锁实例synchronized实现objc_sync_enter 和 objc_sync_exit objc_sync_enterobj存在SyncList的结构SyncList和SyncData的关系id2data函数的实现1. 使用快速缓存2. 获取该线程下的SyncCache3. 全局哈希表查找4. 生成新数据并写入缓存 总结 前言 …

35从零开始学Java之析构方法又是咋回事?

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家详细地介绍了构造方法的使用、特点等内容。我们知道&#xff0…

ESP32 :项目的创建及项目架构解析

一、项目的创建 方式一&#xff1a;基于IDF示例创建 在ESP&#xff0d;IDF中有example示例库&#xff0c;以其中的一个示例为模板创建项目。 1、打开示例库 查看 - 命令面板&#xff08;也可以按住CtrlShiftP 或 F&#xff11;&#xff09; 输入 show examples projects 2…

大数据开发之Hive案例篇8-解析XML

文章目录 一. 问题描述二. 解决方案2.1 官方文档2.2 XML格式不规范 一. 问题描述 今天接到一个新需求&#xff0c;hive表里面有个字段存储的是XML类型数据 数据格式: <a><b>bb</b><c>cc</c> </a>二. 解决方案 2.1 官方文档 遇到不懂的…

PyTorch-Forecasting一个新的时间序列预测库

时间序列预测在金融、天气预报、销售预测和需求预测等各个领域发挥着至关重要的作用。PyTorch- forecasting是一个建立在PyTorch之上的开源Python包&#xff0c;专门用于简化和增强时间序列的工作。在本文中我们介绍PyTorch-Forecasting的特性和功能&#xff0c;并进行示例代码…

xhs小红薯【帖子】采集工具python爬虫抓取

一、xhs【帖子/笔记/视频】采集工具链接 &#xff08;请复制链接至浏览器&#xff0c;进行数据采集&#xff09; http://106.53.68.168:9920/xhs-keyword-spider 能爬取到的属性字段如图1 (点击右侧下拉按钮&#xff0c;可任选字段&#xff09; 图1属性字段 二、爬取规则 …

计算机毕业论文选题推荐|软件工程|系列九

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)学生在校信息管…

哪些pdf编辑软件值得下载?办公常备软件

PDF&#xff08;Portable Document Format&#xff09;是一种广泛用于电子文件传输的文档格式。为了更好的编辑和管理PDF文档&#xff0c;许多PDF编辑软件逐渐发展出来。本文将介绍PDF编辑软件的功能和使用方法。 使用PDF编辑软件可以提高我们的工作效率和文档管理能力。下面介…

【AI提示】ChatGPT提示工程课程(吴恩达OpenAI)迭代提示词笔记(中文chatgpt版)...

Iterative Prompt Develelopment 迭代提示词开发 在本课中&#xff0c;您将反复分析和优化您的提示&#xff0c;以从产品说明书生成营销文案。 设置 import openai import osfrom dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv()) # read local .env fil…

漫画管理工具Kapowarr

之前老苏写过不少漫画相关的软件&#xff0c;Mango、Kavita、Komga等等&#xff0c;但和今天要介绍的 Kapowarr 不太一样&#xff0c;如果你之前用过 Radarr、Sonarr 等 *arr 系列软件&#xff0c;应该是很容易上手的 什么是 Kapowarr &#xff1f; Kapowarr&#xff08;以前的…