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

差分|递归

 

 

lc889

 class Solution {
public:
    TreeNode* constructFromPrePost(vector<int>& preorder, vector<int>& postorder) {
        reverse(postorder.begin(),postorder.end()); //翻转后,后序相当于:根右左
        int n = preorder.size();
        unordered_map<int,int> pre_id,pos_id;
        for(int i = 0;i < n;i++){
            pre_id[preorder[i]] = i;
            pos_id[postorder[i]] = i;
        }
        //以前序遍历为主进行分治,区间内第一个点(值x)为根,后面的点为直系左孩子l,下标lid(这里只是一种情况,不具唯一性)
        //获取x在翻转后序中的下标lid,后面(lid+1)就是x的直系右孩子,设为r
        //获取r在先序中的下标rid,即可划分区间分治,这里是闭区间
        auto build = [&](this auto&& build,int left,int right)->TreeNode*{
            if(left > right) return nullptr;
            int x = preorder[left];
            if(left == right) return new TreeNode(x); //叶子节点


            int lid = pos_id[x];
            int r,rid = right + 1; //如果后序中,l后面没有元素,说明x没有右孩子
            if(lid < n-1){
                r = postorder[lid + 1];
                rid = pre_id[r];
            }
            return new TreeNode(x,build(left+1,rid-1),build(rid,right));
        };
        return build(0,n-1);
    }
};

 

lc1110

后序检查

 class Solution {
public:
    vector<TreeNode*> delNodes(TreeNode* root, vector<int>& to_delete) {
        unordered_set<int>ma;
        for(int p:to_delete) ma.insert(p);
        vector<TreeNode*>res;
        function<TreeNode*(TreeNode*)>dfs=[&](TreeNode* root)->TreeNode*

  {
            if(!root) return nullptr;
            root->left=dfs(root->left);
            root->right=dfs(root->right);
            if(!ma.count(root->val)) 
                return root;
       //走不到后面了
                
            if(root->left) res.push_back(root->left);
            if(root->right) res.push_back(root->right);
            return nullptr;
        }; 


        if(dfs(root)) res.push_back(root);
        return res;
    }
};

 

lc849

一次线性遍历-模拟选择

max(左右端点,中间memo mx_d)

class Solution {
public:
    int maxDistToClosest(vector<int>& seats) {
        int first = -1, last = -1;
        int d = 0, n = seats.size();
        for (int i = 0; i < n; ++i) {
            if (seats[i] == 1) {
                if (last != -1) {
                    d = max(d, i - last);
                }
                if (first == -1) {
                    first = i;
                }
                last = i;
            }
        }
        return max({d / 2, max(first, n - last - 1)});
    }
};

 

lc1249

计数模拟左右括号的消耗

不用固化的用栈

 class Solution {
public:
    string minRemoveToMakeValid(string s) {
        int left = 0;
        int right = count(begin(s), end(s), ')');
        string ans = "";
        for (auto& c : s) {
            if (c == '(') {
                if (right > 0) {
                    ans += c;
                    left++;
                    right--;
                }
            } else if (c == ')') {
                if (left > 0) {
                    ans += c;
                    left--;
                } else {
                    right--;
                }
            } else {
                ans += c;
            }
        }
        return ans;
    }
};

 

lc3346

差分统计每个数±k区间的覆盖次数

结合原数计数和操作次数

ans = max(ans, min(sum_d, cnt[x] + numOperations));

 class Solution {
public:
    int maxFrequency(vector<int>& nums, int k, int numOperations) {
        unordered_map<int, int> cnt;
        map<int, int> diff;


        for (int x : nums) {
            cnt[x]++;
            diff[x]; // 把 x 插入 diff,以保证下面能遍历到 x
            diff[x - k]++; // 把 [x-k, x+k] 中的每个整数的出现次数都加一
            diff[x + k + 1]--;
        }

        int ans = 0, sum_d = 0;
        for (auto& [x, d] : diff) {
            sum_d += d;
            ans = max(ans, min(sum_d, cnt[x] + numOperations));
        }
        return ans;
    }
};


 

 

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

相关文章:

  • 如何通过纺织服装MES系统提升生产效率和管理水平?
  • 打通智慧高速核心系统:湖南某新建项目的收费、通信、监控一体化实践
  • 河南网站建设优化技术福建省建设干部网站
  • 智能机器人:今年双十一“减人增效”的AI智能客服机器人方案
  • 市环保局网站建设方案建站公司哪家好 知道万维科技
  • 房产中介网站建设的目的cms 美容网站 模版
  • vue开发中,如果出现了反显数据有问题(后端明明返回的有数据,但就是不反显,没有值)是什么原因
  • 【2025-系统规划与管理师】第12章:信息系统服务管理
  • C++---嵌套类型(Nested Types)封装与泛型的基石
  • Floyd判圈算法(Floyd Cycle Detection Algorithm)
  • 网站建设支付宝温州建设学校网站
  • 深圳网站制作 优选灵点网络前端开发语言有哪些
  • .NET8 通过自定义类映射appsettings.json 文件某个节点的配置
  • 25-DAPO: An Open-Source LLM Reinforcement LearningSystem at Scale
  • 6个网站建设网站设置保存登录密码怎么取消
  • 网站建设和维护的职责网站开发工程师有证书考试吗
  • 网站建设计算机人员招聘策划营销方案
  • 《i.MX6ULL LED 驱动实战:内核模块开发与 GPIO 控制》
  • Effective Java学习笔记:用静态工厂方法代替构造器(第一条)
  • TDengine 数学函数 POW 用户手册
  • AI大模型“战国策”:主流LLM平台简单介绍
  • Prometheus监控部署——pushgateway自动推送
  • 网站布局优化问问建设网站的人
  • 做网站宜宾深圳龙华网站建设公司
  • vue3 setup的平级函数(宏函数)
  • 企业门户网站开发代码游戏公司网站模板下载
  • 基于MATLAB的证件照片背景变换实例
  • 网站模板资源
  • 网站开发与托管协议诚信通旺铺网站建设
  • 做a图片网站公众号涨粉