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

懒删除|并查集|容斥

 

 

 

 

lc1201

容斥+二分

一个数,有多少个丑数小于等于该数是可以快速计算出来的

 class Solution {

public:

    long LCM(long a, long b) {

        return a * (b / __gcd(a, b));

    }

    int nthUglyNumber(int n, int a, int b, int c) {

        long ab = LCM(a, b);

        long ac = LCM(a, c);

        long bc = LCM(b, c);

        long abc = LCM(ab, c);

        long l = min(a, min(b, c));

        long r = 2 * 10e9;

        while (l < r) {

            long m = l + (r - l) / 2;

            long count = m / a + m / b + m / c - m / ab - m / ac - m / bc + m / abc;

            if (count < n) 

                l = m + 1;

             else 

                r = m;

            }

        }

        return l;

    }

};

 

lc926

记录已出现的'1'数量(cnt)

动态计算把当前'0'翻成'1'(dp+1)or

前面'1'全翻成'0'(cnt)的最小值(dp)

 

最终得让字符串非递减的最少翻转次数

class Solution {
public:
int minFlipsMonoIncr(string s) {
int n=s.size();
if(n==1)return 0;
int cnt=0,dp=0;
if(s[0]=='1')  cnt=1;
for(int i=1;i<n;i++)
{
if(s[i]=='1')  ++cnt;
else if(s[i]=='0')

                 dp=min(dp+1,cnt);
}
return dp;
}
};

 

 

lc684

class Djset {
public:
vector<int> parent;  // 记录节点的根
vector<int> rank;  // 记录根节点的深度(用于优化)
Djset(int n): parent(vector<int>(n)), rank(vector<int>(n)) {
for (int i = 0; i < n; i++) {
parent[i] = i;
}
}

    int find(int x) {
if (x != parent[x]) {
parent[x] = find(parent[x]);
}
return parent[x];
}

    bool merge(int x, int y) {
int rootx = find(x);
int rooty = find(y);
if (rootx != rooty) {
if (rank[rootx] < rank[rooty]) {
swap(rootx, rooty);
}
parent[rooty] = rootx;
if (rank[rootx] == rank[rooty]) rank[rootx] += 1;
return false; // 根节点不同,返回false
}
// 根节点相同,返回true
return true;

}
};

 

class Solution {
public:
vector<int> findRedundantConnection(vector<vector<int>>& edges)

{
int n = edges.size();
Djset ds(n);
for (auto& e : edges)

     {
if(ds.merge(e[0] - 1, e[1] - 1))

                     return {e[0],e[1]};
}
return {};
}
};

 

拓扑排序

class Solution

{

public:

    vector<int> findRedundantConnection(vector<vector<int>>& edges) {

        int n = edges.size();

        // 邻接表

        vector<vector<int> > nei(n);

        vector<vector<int> > g(n, vector<int>(n));

        vector<int> deg(n, 0);

 

        for (auto& e : edges) {

            int a = e[0] - 1;

            int b = e[1] - 1;

            nei[a].emplace_back(b);

            nei[b].emplace_back(a);

            g[a][b] = 1;

            g[b][a] = 1;

            deg[a]++;

            deg[b]++;

        }

        

        queue<int> q;

        for (int i = 0; i < n; i++) {

            if (deg[i] == 1) q.push(i);

        }

 

        while (!q.empty()) {

            int u = q.front();

            for (auto& e : nei[u]) {

                --deg[u];

                --deg[e];

                g[u][e] = 0;

                g[e][u] = 0;

                if (deg[e] == 1) q.push(e);

            }

            q.pop();

        }

 

        for (int i = n-1; i >= 0; i--) {

            if (g[edges[i][0]-1][edges[i][1]-1] == 1) {

                return {edges[i][0], edges[i][1]};

            }

        }

        return {};

    }

};

 

lc2349

class NumberContainers {
public:
NumberContainers() {
}

    void change(int index, int number) {
if (d.contains(index))

        {
int old = d[index];

g[old].erase(index);
if (g[old].empty()) {
g.erase(old);
}
}
d[index] = number;
g[number].insert(index);

}

 

    int find(int number) {
return g.contains(number) ? *g[number].begin() : -1;
}

private:
unordered_map<int, int> d;
unordered_map<int, set<int>> g;
};

 

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

相关文章:

  • 鲁大齐专业WordPress外贸独立站建设服务商
  • 【LeetCode 每日一题】3516. 找到最近的人
  • 团体程序设计天梯赛-练习集 L1-030 一帮一
  • delphi 最大String
  • 线程安全的C++对象:深入探讨与实现
  • 关于段访问机制
  • 如何判断nmos和pmos导通和截止
  • 密码攻击技术全景:模型、方法与攻防演进
  • Avalonia跟WPF的不同点
  • 下载 | Win11 25H2 准正式版更新!(ISO映像、2025年度版本、26200.6713、Windows 11)
  • 2025年生态环境大数据技术发展潜力大不大?
  • opencv静态编译win10
  • Linux进程控制与编程实战:从fork到mini-shell的完整指南
  • Python实现三角龙优化算法 (Triceratops Optimization Algorithm, TOA) 优化函数(附完整代码)
  • JS开发工具有哪些?常用JS开发工具推荐、JS调试工具对比与最佳实践分享
  • QNX系统入门总结
  • 网站服务相关问题
  • 系统设计(Python\JAVA)选题
  • 移动零_优选算法(C++)
  • 【字节跳动】LLM大模型算法面试题:llama 输入句子长度理论上可以无限长吗
  • 基于STM32单片机的超声波跟随婴儿车设计
  • 深入理解 Linux 系统调用
  • 工厂模式VS抽象工厂模式
  • Python面试题及详细答案150道(136-150) -- 网络编程及常见问题篇
  • type 对比 interface【前端TS】
  • qt使用camke时,采用vcpkg工具链设置VTK的qt模块QVTKOpenGLNativeWidget
  • 【Linux网络编程】传输层协议-----TCP协议
  • 英莱科技焊缝跟踪系统亮相德国埃森焊接展,激光视觉点亮世界舞台
  • 【提示工程】向AI发出高质量的指令(实战篇)
  • LG P5127 子异和 Solution