力扣 第 121 场双周赛 解题报告 | 珂学家 | 数位DP

news2025/1/29 14:07:04

前言

在这里插入图片描述


整体评价

T3, T4 都是典题


T1. 大于等于顺序前缀和的最小缺失整数

思路: 模拟

class Solution {
public:
    int missingInteger(vector<int>& nums) {
        set<int> s(nums.begin(), nums.end());
        int acc = nums[0];
        for (int i = 1; i < nums.size(); i++) {
            if (nums[i - 1] + 1 != nums[i]) break;
            acc += nums[i];
        }
        
        while (s.find(acc) != s.end()) {
            acc ++;
        }
        return acc;
    }
};

T2. 使数组异或和等于 K 的最少操作次数

思路: 思维题

KaTeX parse error: Got function '\prod' with no arguments as superscript at position 5: k ^ \̲p̲r̲o̲d̲_{i=0}^{i=n-1} … 的1个数

class Solution {
public:
    int minOperations(vector<int>& nums, int k) {
        int r = 0;
        for (int v: nums) r ^= v;
        
        r = r ^ k;
        
        int cnt = 0;
        while (r > 0) {
            r = r & (r - 1);
            cnt++;
        }
        return cnt;
    }
};

T3. 使 X 和 Y 相等的最少操作次数

思路: BFS

BFS的状态数10^6内

如果x,y值域扩大的话,那就很变难了,需要用dfs来求解

class Solution {
public:
    int minimumOperationsToMakeEqual(int x, int y) {
        
        if (x <= y) return y - x;
        
        int inf = 0x3f3f3f3f;
        vector<int> vec(x + 11 + 1, inf);
        
        vec[x] = 0;
        deque<int> deq;
        deq.push_back(x);
        
        while (!deq.empty()) {
            int c = deq.front();
            deq.pop_front();
            if (c - 1 >= 0 && vec[c - 1] > vec[c] + 1) {
                vec[c - 1] = vec[c] + 1;
                deq.push_back(c - 1);
            } 
            if (c + 1 <= x + 11 && vec[c + 1] > vec[c] + 1) {
                vec[c + 1] = vec[c] + 1;
                deq.push_back(c + 1);
            }
            if (c % 5 == 0 && vec[c / 5] > vec[c] + 1) {
                vec[c / 5] = vec[c] + 1;
                deq.push_back(c / 5);
            }
            if (c % 11 == 0 && vec[c / 11] > vec[c] + 1) {
                vec[c / 11] = vec[c] + 1;
                deq.push_back(c / 11);
            }
        }
        
        return vec[y];
    }
};

T4. 统计强大整数的数目

思路: 数位DP

using int64 = long long;

class Solution {
public:
    long long numberOfPowerfulInt(long long start, long long finish, int limit, string s) {
        return solve(finish, limit, s) - solve(start - 1, limit, s);
    }

    int64 solve(int64 v, int limit, string s) {

        vector<int> arr;
        for (int64 x = v; x > 0; x /= 10) arr.push_back((int)(x % 10));
        reverse(arr.begin(), arr.end());

        int n = arr.size(), m = s.length();
        if (n < s.length()) return 0;
        if (n == m) {
            int sv = atoi(s.c_str());
            return sv <= v ? 1LL : 0LL;
        }        
        
        vector<int64> dp(n, -1);
        function<int64(int, bool, bool)> dfs = [&](int idx, bool isNum, bool isLimit) {
            if (idx + m == n) {
                if (isLimit) {
                    for (int i = idx; i < n; i++) {
                        if (arr[i] < s[i - idx] - '0') return 0LL;
                        else if (arr[i] > s[i - idx] - '0') return 1LL;
                    }
                }
                return 1LL;
            }
            int64 res = 0;
            if (!isNum) {
                res += dfs(idx + 1, false, false);
            }
            if (isNum && !isLimit) {
                if (dp[idx] != -1) return dp[idx];
            }

            int s = isNum ? 0 : 1;
            int e = isLimit ? min(arr[idx], limit) : limit;
            for (int i = s; i <= e; i++) {
                res += dfs(idx + 1, true, isLimit && i == arr[idx]);
                
            }

            if (isNum && !isLimit) {
                dp[idx] = res;
            }
            return res;
        };


        int64 res = dfs(0, false, true);
         
        return res;
    }

};

写在最后

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1383398.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

非常非常实用!不能错过,独家原创,9种很少人听过,但却实用的混沌映射!!!以鲸鱼混沌映射为例,使用简便

很多人在改进的时候&#xff0c;想着增加混沌映射&#xff0c;增加初始种群的多样性&#xff0c;可是&#xff0c;大多数论文中常见的映射&#xff0c;都被别人使用了&#xff0c;或者不知道被别人有没有使用&#xff0c; 本文介绍9种很少人知道&#xff0c;但非常实用混沌映射…

【Maven】006-Maven 依赖传递和依赖冲突

【Maven】006-Maven 依赖传递和依赖冲突 文章目录 【Maven】006-Maven 依赖传递和依赖冲突一、依赖传递1、概述2、案例&#xff1a;jackson 依赖引入依赖Maven 仓库详情页IDEA 中查看 Maven 依赖关系 二、依赖冲突1、概述2、冲突解决的两种方式 一、依赖传递 1、概述 概念&am…

【并发】共享模型之管程

共享模型之管程 共享问题 package 并发;public class Test1 {static int a0;public static void main(String[] args) throws InterruptedException {Thread t1new Thread(new Runnable() {Overridepublic void run() {for(int i0;i<5000;i){a;}}});Thread t2new Thread(n…

Linux scp命令 服务器之间通讯

目录 一. scp命令简介二. 本地服务器文件传输到远程服务器三. 本地服务器文件夹传输到远程服务器 一. scp命令简介 scp&#xff08;Secure Copy Protocol&#xff09;是用于在Unix或Linux系统之间安全地复制文件或目录的命令。 它使用SSH&#xff08;Secure Shell&#xff09;…

python基础-文件读写

总结&#xff1a; 文件操作掌握一个函数open&#xff0c;三个方法read,write,close; 1、操作文件的思路 打开文件&#xff1b; 注意&#xff1a; 计算机操作文件的步骤基本固定&#xff01;读取文件&#xff1b; 关闭文件&#xff1b; 2、 操作文件 在Python中…

【数据库】聊聊MVCC机制与BufferPool缓存机制

上一篇文章&#xff0c;介绍了隔离级别&#xff0c;MySQL默认是使用可重复读&#xff0c;但是在可重复读的级别下&#xff0c;可能会出现幻读&#xff0c;也就是读取到另一个session添加的数据&#xff0c;那么除了配合使用间隙锁的方式&#xff0c;还使用了MVCC机制解决&#…

信息系统安全——Linux 访问控制机制分析

实验 4 Linux 访问控制机制分析 4.1 实验名称 《Linux 访问控制机制分析》 4.2 实验目的 1 、熟悉 Linux基本访问控制机制使用和原理 2 、熟悉 Linux S 位的作用和使用 3 、熟悉强制访问控制 Selinux 原理及其使用 4.3 实验步骤及内容 1 、Linux 基本访问控制机制 &#xff08…

Harbor离线安装

下载安装包 $ wget https://github.com/goharbor/harbor/releases/download/v2.7.4/harbor-offline-installer-v2.7.4.tgz解压 $ tar xvf harbor-offline-installer-v2.7.4.tgz -C /usr/local修改配置 $ cd /usr/local/harbor $ cp harbor.yml.tmpl harbor.yml $ vim harbo…

c++多久会被Python或者新语言取代?

c多久会被Python或者新语言取代&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「c的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&am…

【保姆级】教师资格证介绍,教资考什么,应该准备什么,5分钟快速浏览(包含报考流程)

官网 一般一年两次&#xff0c;通过笔试之后可以报名面试 这里写目录标题 报考教资的报考条件笔试科目一&#xff0c;科目二科目三 面试笔试面试通过后需要进行申请拿到教师资格证申请需要的材料1.毕业证书2.普通话3.笔试面试合格4.体检检查合格5.思想品德鉴定6.其他证件 黑龙…

mybatisplus(service CRUD 接口)

一、我们在控制器层都是调用Service层&#xff0c;不会直接调用仓储层。现在我给大家介绍一下怎么快速实现Service 的CRUD 定义接口&#xff1a;IProductService 继承IService<实体> package com.saas.plusdemo;import com.baomidou.mybatisplus.extension.service.ISe…

VSCode添加Python解释器并安装Python库

目录 一、安装VSCode 二、安装Python解释器 1、安装包链接 2、安装过程 3、测试 4、安装flake8和yapf两个包 &#xff08;1&#xff09;安装flake8包 &#xff08;2&#xff09;安装yapf包 三、VSCode中选择python解释器 一、安装VSCode VSCode安装教程&#xff08;默…

【iOS】UIColor、CGColor、CIColor的区别和联系

编者在实验室小组的指导下&#xff0c;仿写了许多App&#xff0c;其中UI的颜色模仿也是令人头痛的点。设计颜色一般使用UIColor类方法直接获取颜色&#xff1a; 有时会使用 (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alph…

GPT编程:运行第一个聊天程序

环境搭建 很多机器学习框架和类库都是使用Python编写的&#xff0c;OpenAI提供的很多例子也是Python编写的&#xff0c;所以为了方便学习&#xff0c;我们这个教程也使用Python。 Python环境搭建 Python环境搭建有很多种方法&#xff0c;我们这里需要使用 Python 3.10 的环境…

2023年终总结,一路向阳待花期

回望2023&#xff0c;可谓“苦尽甘来终有时&#xff0c;一路向阳待花期”。这一年&#xff0c;经历很多&#xff0c;收获亦很多。 回望2023 2023年最重要的三件事&#xff0c;想聊聊买房、工作、自我提升。 买房&#xff1a; 众所众知&#xff0c;2023楼市整体的情况不甚乐…

【SpringBoot实战专题】「开发实战系列」深入迁出探索剖析SpringBoot服务容器特性的利器之Actuator(Web端点)

深入迁出探索剖析SpringBoot服务容器特性的利器之Actuator 内容简介内容大纲Actuator Web端点洞察应用程序内部状况的关键Actuator提供了13个端点启用ActuatorMaven依赖Gradle依赖 Actuator透视组件装配过程获得Bean装配报告&#xff08;/beans&#xff09;Bean属性概览Bean报告…

代码随想录算法训练营第一天|数组理论基础、704二分查找、27移除元素

数组理论基础 一维数组 数组中的元素在内存空间中是连续的数组名与数组中第一个元素的地址相同&#xff08;一维数组&#xff09;数组的下标从0开始删除数组的元素其实是用后面的元素覆盖掉要删除的元素数组的长度不能改变 二维数组 二维数组是按照行存储的&#xff0c;也是…

宠物空气净化器品牌推荐哪个牌子好?五款猫用空气净化器高质量推荐品牌

养宠人家里除了猫粮、猫砂和罐头等必备的日常用品外&#xff0c;宠物空气净化器也是必需的。它可以在我们不方便开窗通风的日子里&#xff0c;有效净化室内空气&#xff0c;并且能够有效减少动物皮屑引起的过敏反应。然而&#xff0c;面对市场上琳琅满目的新款空气净化器、功能…

Python--循环语句

在 Python 中&#xff0c;循环语句用于重复执行一段代码多次。Python 主要提供了两种类型的循环&#xff1a;for 循环和 while 循环。 1. for 循环 for 循环用于遍历可迭代对象&#xff08;如列表、元组、字典、字符串等&#xff09;中的每个元素&#xff0c;并对每个元素执行…

【牛客周赛Round 27】题目讲解

题目一 小红的二进制删数字&#xff1a; 小红拿到了一个二进制字符串 s&#xff0c;她可以删掉其中的一些字符&#xff0c;使得最终该字符串为一个2的幂&#xff08;即可以表示为 2^k 形式的数&#xff09;。小红想知道&#xff0c;自己最少删几个字符可以达成&#xff1f;请你…