[M二分答案] lc2576. 求出最多标记下标(二分答案+同向双指针+贪心)

文章目录

    • 1. 题目来源
    • 2. 题目解析

1. 题目来源

链接:2576. 求出最多标记下标

2. 题目解析

本题还挺有意思的哈。有几种较为直观的贪心思路,却都是错误的。

  • 排序。顺序枚举,找到一对满足的就行了,属于《小,小》 配合。显然,[2,4,5,9] 用例报错。
  • 排序。倒序枚举,找到一对满足的就行了,属于《大,大》配合。这个倒不是显然,只是写完后会报错,会发现当 《大,大》配合时会发现前缀可能剩下一段很小的数字,而这些数字任选两个,就可以和前面这些 《大,大》的数再配合起来,还能增加答案个数,但是这个思路处理起来就很麻烦,也不是正解。

正解思路:二分答案,同向双指针。

思路:二分答案

  • 假设有 k 组已经构成的数对。
  • 那么肯定是 k 个最小的,和 k 个最大的构成的答案。这个简单可证,如果不是最小的 k 个和最大的 k 个构成的答案,那么可以通过交换,构成上述答案。反之,则不行。
  • 且若 k 构成了答案,那么 0~k-1 对肯定也是构成答案的。
  • 此时,构成答案的 k 具有单调性,即 0~k 均构成答案,而 k+1~n/2 无法构成答案。
  • 故,根据上述思路,二分答案即可。

注意点:

  • l=0, r=n/2 即可,因为是数对,所以直接 n/2。
  • k 不可取到 0,这是没有意义的。
  • nums[i] 是和 nums[n-k+i] 进行匹配。注意下标关系。

思路:同向双指针

  • 基于上述二分思路,很容易可以想到同向双指针思路。
  • 数组此时被分成两半,前半段、后半段。
  • 如果前半段的 i 匹配到了后半段的 j,那么对于 i+1 来说,只能与后面的 j+1 的数看看能否匹配。
  • 指针移动具有单调性。

  • 时间复杂度 O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度 O ( n 2 ) O(n^2) O(n2)

代码:

二分答案:

class Solution {
public:int maxNumOfMarkedIndices(vector<int>& nums) {sort(nums.begin(), nums.end());int n = nums.size();int l = 0, r = n / 2;auto check = [&](int k) {for(int i = 0; i < k; i ++ )if (nums[i] * 2 > nums[n - k + i]) return false;return true;};while (l < r) {int mid = l + r + 1 >> 1;   // 这里 mid 不可能为 0,所以上面的 n-k+i 也不可能为 nif (check(mid)) l = mid;else r = mid - 1;}return l * 2;}
};

同向双指针:

class Solution {
public:int maxNumOfMarkedIndices(vector<int>& nums) {sort(nums.begin(), nums.end());int n = nums.size();int res = 0;int i = 0;for (int j = (n + 1) / 2; j < n; j ++ ) {if (nums[i] * 2 <= nums[j]) i ++ ;}return i * 2;}
};

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

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

相关文章

NAT技术+代理服务器+内网穿透

NAT技术 IPv4协议中&#xff0c;会存在IP地址数量不充足的问题&#xff0c;所以不同的子网中会存在相同IP地址的主机。那么就可以理解为私有网络的IP地址并不是唯一对应的&#xff0c;而公网中的IP地址都是唯一的&#xff0c;所以NAT&#xff08;Network Address Translation&…

Pyspark下操作dataframe方法(1)

文章目录 Pyspark dataframe创建DataFrame使用Row对象使用元组与scheam使用字典与scheam注意 agg 聚合操作alias 设置别名字段设置别名设置dataframe别名 cache 缓存checkpoint RDD持久化到外部存储coalesce 设置dataframe分区数量collect 拉取数据columns 获取dataframe列 Pys…

[数据集][目标检测]智慧农业草莓叶子病虫害检测数据集VOC+YOLO格式4040张9类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4040 标注数量(xml文件个数)&#xff1a;4040 标注数量(txt文件个数)&#xff1a;4040 标注…

TCP/IP - Transport Layer

目录 1. UDP1.1. 数据格式1.2. 端口号2. TCP2.1. 数据格式2.2. TCP建立:三次握手2.3. TCP断开:四次挥手2.x. TCP与UDP的区别3. ICMP3.1. ICMP帧格式回见TCP/IP 对TCP/IP协议簇传输层作介绍 1. UDP UDP(User Datagram Protocol,用户数据报协议)是一种面向无连接的传输层协…

【小沐学OpenGL】Ubuntu环境下glew的安装和使用

文章目录 1、简介1.1 OpenGL简介1.2 glew简介 2、安装glew2.1 命令安装glew2.2 直接代码安装glew2.3 cmake代码安装glew 3、测试glew3.1 测试glewfreeglut3.2 测试glewglfw 结语 1、简介 1.1 OpenGL简介 Linux 系统中的 OpenGL 是一个跨语言、跨平台的应用程序编程接口&#…

多态的概念

多态 所谓的多态其实就是多种形态&#xff0c;它又被分为编译时多态(静态多态) 和 运行时多态(动态多态)。 静态的多态其实就是之前的模版和函数重载&#xff0c;今天我们主要讲动态的多态。所谓的动态多态其实就是相同的函数&#xff0c;完成不同的功能。 这就实现了明明都是…

《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》P84

更正卷积与相关微课中互相关运算动画中的索引。 1-D correlation rectwave 禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》 禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码

【Linux实践】实验一:Linux系统安装与启动

【Linux实践】实验一&#xff1a;Linux系统安装与启动 实验目的实验内容实验步骤及结果1. 下载VMware2. 下载 Linux 操作系统3. 在VMware中安装Ubuntu系统4. 配置Ubuntu系统5. 关机 实验目的 1.掌握Linux系统的安装过程和简单配置方法。 2.掌握与Linux相关的多操作系统的安装方…

【Leetcode算法面试题】-1. 两数之和

文章目录 算法练习题目思路参考答案算法1算法2算法3 算法练习 面试经常会遇到算法题目&#xff0c;今天开启算法专栏&#xff0c;常用算法解析 题目 ** 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&…

算法练习题25——合并多项式

题目描述 给定两个多项式&#xff0c;要求对它们进行合并。每个多项式的形式为若干项的集合&#xff0c;每项包含一个系数和一个指数。你需要将两个多项式按照指数相同的项合并&#xff0c;合并后的多项式要求按指数从小到大的顺序输出&#xff0c;输出格式为&#xff1a;各项…

为拖延症量身定制的AI工具,让Kimi做我的《每日信息整理助手》

AI不止对传统行业带来巨大的改变&#xff0c;对日常生活也便利了不少&#xff0c;现在这个时代获取信息的方式太简单了。 我们每天都会接受大量的信息&#xff0c;难免一天下来会忘记很多事情&#xff0c;有时候突然想起了一个点子&#xff0c;有时候突然有一件急事、一件待办事…

深入理解FastAPI的response_model:自动化数据验证与文档生成

使用 FastAPI 的 response_model 参数 在构建 RESTful API 时&#xff0c;确保数据的一致性和正确性是非常重要的。FastAPI 提供了强大的工具来帮助开发者实现这一目标。其中一个关键特性是 response_model 参数&#xff0c;它允许开发者定义期望的响应格式&#xff0c;并自动…

背诵——系统设计

系统设计 概要设计 概要设计又称为系统总体结构设计&#xff0c;它是系统开发过程中很关键的一步&#xff0c;其主要任务是将系统的功能需求分配给软件模块&#xff0c;确定每个模块的功能和调用关系&#xff0c;形成软件的模块结构图&#xff0c;即系统结构图。在概要设计中…

windows 显示进程地址空间

windows 显示进程地址空间 windows 显示进程地址空间 文章目录 windows 显示进程地址空间显示进程地址空间 显示进程地址空间 /* 3-ProcessInfo.cpp 显示进程地址空间 */#include "..\\CommonFiles\\CmnHdr.h" #include "..\\CommonFiles\\Toolhelp.h"#i…

17 个被动和主动遥感之间的区别

摘要: 遥感是指通过使用连接到卫星的传感器记录有关地球表面信息的行为。遥感在收集大面积信息、表征地球上的自然特征、观察和监测地球和物体随时间的变化以及 利用这些信息进行处理和分析方面发挥着至关重要的作用。在遥感中,太阳是终极能源,对照明非常有用。卫星具有成像传…

LCS—最长公共子序列

最长公共子序列问题就是求出两个字符串的LCS长度&#xff0c;是一道非常经典的面试题目&#xff0c;因为它的解法是典型的二维动态规划。 比如输入 str1 "babcde", str2 "acbe"&#xff0c;算法应该输出3&#xff0c;因为 str1 和 str2 的最长公共子序列…

金属铬厂商分析:前十强厂商占有大约64.0%的市场份额

金属铬是一种灰色、有光泽、硬而脆的过渡金属。铬是不锈钢的主要添加剂&#xff0c;可增加耐腐蚀性。 据QYResearch调研团队最新报告“全球金属铬市场报告2024-2030”显示&#xff0c;预计2030年全球金属铬市场规模将达到11.8亿美元&#xff0c;未来几年年复合增长率CAGR为6.5%…

Spring Cloud之三 网关 Gateway

1:Intellij 新建项目 spring-cloud-gateway 2:pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoca…

React 项目中,如何实现有效的内存管理和防止内存泄漏?

在 React 项目中&#xff0c;实现有效的内存管理和防止内存泄漏是确保应用性能和用户体验的关键。以下是一些具体的实践技巧和示例&#xff1a; 使用 useEffect 清理副作用&#xff1a; 在 useEffect 中返回一个清理函数&#xff0c;确保在组件卸载时清除事件监听器、定时器等资…

CnCrypt(磁盘加密工具绿色版是一款功能强大磁盘加密工具,供大家学习研究参考

CnCrypt(磁盘加密工具)特点 加密单个分区或整个硬盘,所有加密都是以分区为基础的 提供两级方案,以应对被强迫说出密码的情况(如抢劫。隐藏分区(覆盖式密码术,steganography)无法探测到CnCrypt 加密分区(加密数据会被认为是随机数据)。 CnCrypt(磁盘加密工具)特色 1、加密U…