当前位置: 首页 > article >正文

leetcode 2576.求出最多标记下标

2576.求出最多标记下标

题意:

在这里插入图片描述

解析:

数组长为 n n n,因为一次标记两个,所以数组中最多有 ⌊ n 2 ⌋ \lfloor \frac{n}{2}\rfloor 2n 对标记。

贪心的考虑,一个数 x 一定优先与满足 y ≥ 2 x y \ge 2x y2x 中最小的 y 进行匹配。

所以将数组排序,然后根据长度分成两部分,左侧较小的元素优先与右侧较小的元素进行匹配。用双指针扫描两部分数组,如果 n u m s [ j ] < 2 n u m [ i ] nums[j] < 2num[i] nums[j]<2num[i],则不断将 j j j 指针后移。

代码:

int maxNumOfMarkedIndices(vector<int>& nums) {
        int n = nums.size();
        sort(nums.begin(), nums.end());
        int pos = n/2;
        int ans = 0;
        for(int i = 0, j = pos; i < pos && j < n; i++, j++){
            while(j < n && nums[i]*2 > nums[j])
                j++;
            if(j < n)
                ans += 2;
        }
        return ans;
        
    }

二分答案:

另一种思路是二分答案。二分匹配的对数 k,如果能有 k 对匹配,则一定是最小的 k 个数与最大的 k 个数进行匹配。


http://www.kler.cn/a/305778.html

相关文章:

  • ubuntu22.04 的录屏软件有哪些?
  • VSCode Live Server 插件安装和使用
  • 单元测试MockitoExtension和SpringExtension
  • 1.2.1-2部分数据结构的说明02_链表
  • 结构化日志和集中日志服务
  • Jenkins内修改allure报告名称
  • C# 开发教程-中级教程
  • IEEE 754浮点数表示
  • 18062 二维数组每行中的最大值
  • k8s环境配置
  • 【Unity】简易而又实用的抽卡算法
  • 机器学习特征构建与特征筛选
  • NC字典树的实现
  • 深入理解 Redis 的文件事件处理器
  • 暗界正方形之谜
  • 【YashanDB知识库】单机升级典型问题及应急措施
  • Spring3-IoC1-IoC容器、基于xml管理bean
  • 【SSRF漏洞】——http协议常见绕过
  • 【React】React18.2.0核心源码解读
  • 乌俄冲突下AI和计算机的使用
  • Spring Boot:现代化Java应用开发的艺术
  • 远程访问电脑共享文件
  • 【Arduino】BNO085 姿态的 3D模型 展示方法(映射到 Unity)
  • Mybatis通用接口-基于Provider
  • 一维稳态与非稳态导热的详细分析
  • 力扣100题——栈和堆