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

思维|栈

 

lc2216

 

 

lc1209

用数组记录字符连续重复次数

一旦达到k就删除对应子串并回退索引

最终得到去重后的字符串。

class Solution {
public:
    string removeDuplicates(string s, int k) {
        vector<int> cnt(s.size(), 0);
        for (int i = 0; i < s.size(); ++i)
        {
            // 首个元素或者不重复
            if (i == 0 || s[i] != s[i-1])
            {
                cnt[i] = 1;
            }
            else
            {
                // 发现重复,那就是基于之前cnt+1
                cnt[i] = cnt[i-1] + 1;


                if (cnt[i] == k)
                {
                    s.erase(i-k+1, k);
                    i -= k;
                } 


            }
        }

        return s;
    }
};

 

lc910

枚举 截断点 + 小的变大,大的变小

 

先排序数组,然后遍历数组,通过调整前部分元素加  k 、后部分元素减  k ,找所有可能区间的最小差值

 class Solution {
public:
    int smallestRangeII(vector<int>& nums, int k) {
        ranges::sort(nums);
        int ans = nums.back() - nums[0];
        for (int i = 1; i < nums.size(); i++) {
            int mx = max(nums[i - 1] + k, nums.back() - k);
            int mn = min(nums[0] + k, nums[i] - k);
            ans = min(ans, mx - mn);
        }
        return ans;
    }
};

 

lc1775

贪心求op 关注区间 不用关注具体值

完美优雅的抽象...

 

先判断能否通过调整使两数组和相等

若能,统计两数组元素可产生的最大变化量,从大到小累加变化量

来计算让差值为0所需的最少操作次数。

 class Solution {
public:
    int minOperations(vector<int> &nums1, vector<int> &nums2)

{
        if (6 * nums1.size() < nums2.size() || 6 * nums2.size() < nums1.size())
            return -1; // 优化


        int d = accumulate(nums2.begin(), nums2.end(), 0) - accumulate(nums1.begin(), nums1.end(), 0);


        if (d < 0)

       {
            d = -d;
            swap(nums1, nums2); // 统一让 nums1 的数变大,nums2 的数变小
        }


        int cnt[6]{}; // 统计每个数的最大变化量
        for (int x: nums1) ++cnt[6 - x]; // nums1 的变成 6
        for (int x: nums2) ++cnt[x - 1]; // nums2 的变成 1


        for (int i = 5, ans = 0;; --i) { // 从大到小枚举最大变化量 5 4 3 2 1
            if (i * cnt[i] >= d) // 可以让 d 变为 0
                return ans + (d + i - 1) / i;


            ans += cnt[i]; // 需要所有最大变化量为 i 的数
            d -= i * cnt[i];
        }
    }
};

 

http://www.dtcms.com/a/498819.html

相关文章:

  • 关于网站建设方案的案例数码产品销售网站建设策划书
  • 2025年10月17日
  • Entity Framework Core和SqlSugar的区别,详细介绍
  • 【C语言】运算符
  • 网站备案帐号是什么菏泽微信小程序制作
  • 消息队列以及RabbitMQ的使用
  • PyCharm之服务器篇|Linux连接校园网Neu版
  • 在linux上训练深度学习环境配置(Ubuntu)
  • 洗车小程序系统
  • 网站 备案 营业执照太仓网站设计早晨设计
  • 煤矿网站建设WordPress高端主题 熊
  • 告别炼丹玄学:用元学习精准预测模型性能与数据需求,AWS AI Lab研究解读
  • 无需 VNC / 公网 IP!用 Docker-Webtop+cpolar,在手机浏览器远程操控 Linux
  • Vue3与Cesium:轻量版3D地理可视化实践
  • 数据预处理(音频/图像/视频/文字)及多模态统一大模型输入方案
  • 一段音频多段字幕,让音频能够流畅自然对应字幕 AI生成视频,扣子生成剪映视频草稿
  • Linux-网络安全私房菜(二)
  • 广州外贸网站建设 open需要做网站建设的公司
  • QML学习笔记(四十三)QML与C++交互:上下文属性暴露
  • Redis 的字符串底层实现
  • 递归-206.反转链表-力扣(LeetCode)
  • 【Linux系列】掌控 Linux 的脉搏:深入理解进程控制
  • 百度怎么注册公司网站wordpress 2019主题谷歌字体
  • 算法14.0
  • 基于掌纹生物特征的 Windows 安全登录实践:从物理安全到零信任身份验证
  • uniapp map地图添加浮层
  • 可靠的tcp连接
  • 【uniapp】uni.uploadFile上传数据多出一个304的get请求处理方法
  • uni-app 入门学习教程,从入门到精通,uni-app组件 —— 知识点详解与实战案例(4)
  • 购物网站开发实例wordpress flash加载插件