ad1 广告
 
收藏文章 楼主

力扣2576题解:巧用双指针解决最大标记下标问题

版块:文章资讯   类型:普通   作者:某个人   查看:23   回复:0   获赞:0   时间:2025-07-18 15:31:15

截图未命名.jpg 力扣2576题解:巧用双指针解决最大标记下标问题 双指针算法 数组排序 贪心策略 标记下标 第1张

一、问题理解

我们需要在数组中找出最多可以标记的下标对数,标记规则是:每次选择两个未标记的下标i和j,满足2*nums[i] <= nums[j]。目标是最大化标记的下标总数。

二、关键点分析

  1. 排序预处理‌:排序后可以更高效地找到满足条件的元素对

  2. 双指针技巧‌:将数组分为两半,使用双指针匹配

  3. 贪心策略‌:每次尽可能匹配最小的可行对,以留出更多匹配机会

三、实现详解

  1. 排序数组‌:使用sort函数对输入数组排序

  2. 初始化指针‌:left指向前半部分,right指向后半部分

  3. 匹配过程‌:检查2*nums[left] <= nums[right],满足则计数并移动双指针

  4. 结果返回‌:最终返回标记的下标总数

四、代码实现

class Solution {
public:
    int maxNumOfMarkedIndices(vector<int>& nums) {
        sort(nums.begin(), nums.end());  // 先对数组排序
        int n = nums.size();
        int left = 0, right = n / 2;     // 将数组分为两半
        int count = 0;
       
        // 双指针法寻找匹配对
        while (left < n / 2 && right < n) {
            if (2 * nums[left] <= nums[right]) {
                count += 2;  // 找到一对,标记两个下标
                left++;
                right++;
            } else {
                right++;  // 当前right不满足条件,尝试更大的right
            }
        }
       
        return count;
    }
};

五、边界情况考虑

  1. 空数组:返回0

  2. 所有元素都相同:无法形成任何有效对

  3. 数组长度为奇数:后半部分比前半部分多一个元素

来源:力扣题解

 
ad1 广告位8,870 x auto
回复列表
默认   热门   正序   倒序

回复:力扣2576题解:巧用双指针解决最大标记下标问题

Powered by 免费外链论坛

©2015 - 2025 免费外链论坛

免费外链论坛 免费发布外链 发外链平台Sitemap

您的IP:216.73.216.202,2025-08-03 04:36:26,Processed in 0.02348 second(s).

备案信息:浙ICP备2024090696号

声明:本站内容为用户自主发布,不对其内容真实性负责,虽然本站会一一审核,但能力有限,如您发现违规内容,请及时联系管理员。

主页

欢迎您的浏览

QQ联系图标

自助查询

99%的问题都能找到答案

联系站长

工作时间:9:00~17:30

微信二维码

回到顶部

向上滚动到顶部

个人中心

去个人首页看看吧

转到底部

向下滚动到底部

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息