【LeetCode第2场双周赛】

2023-10-29

第 2 场双周赛

A.

模拟

class Solution {
public:
    int sumOfDigits(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        int t = nums.front();
        int sum = 0;
        while(t) {
            sum += t % 10;
            t /= 10;
        }
        return !(sum & 1);
    }
};

B.

模拟,排序/优先队列。
可以做到 O ( n ) O(n) O(n),及时更新前五大数即可。

class Solution {
public:
    vector<vector<int>> highFive(vector<vector<int>>& items) {
        vector<vector<int>> res;
        vector<vector<int>> temp(1001, vector<int>());
        for(auto u : items)
            temp[u[0]].push_back(u[1]);
        for(int i = 1; i <= 1000; ++i) {
            
            if(!temp[i].empty()) {
                sort(temp[i].begin(), temp[i].end(), greater<int>());
                int sum = 0;
                for(int j = 0; j < 5; ++j)
                    sum += temp[i][j];
                res.push_back({i, sum / 5});
            }
        }
        
        return res;
    }
};

C.

先对字符串进行展开成数组,然后dfs枚举即可

class Solution {
public:
    vector<string> expand(string s) {
        vector<vector<char>> vec;
        for(int i = 0; i < s.size(); ++i) {
            if(s[i] == '{') {
                vector<char> temp;
                int j = i + 1;
                while(j < s.size() && s[j] != '}') {
                    if(isalpha(s[j])) {
                        temp.push_back(s[j]);
                    }
                    j += 1;
                }
                sort(temp.begin(), temp.end());
                vec.push_back(temp);
                i = j - 1;
            } else {
                if(isalpha(s[i])) vec.push_back({s[i]});
            }
        }
        res.clear();
        cur = "";
        dfs(0, vec);
        return res;
    }
private:
    vector<string> res;
    string cur;
    void dfs(int u, vector<vector<char>>& vec) {
        if(u == vec.size()) {
            res.push_back(cur);
            return ;
        }
        for(auto v : vec[u]) {
            cur += v;
            dfs(u + 1, vec);
            cur.pop_back();
        }
    }
};

D.

先数位 d p dp dp求出来所有不含 2 、 3 、 4 、 5 、 7 2、3、4、5、7 23457的数

然后考虑翻转180°后相同的情况,将这些数减去:

  • 1 、 0 、 8 1、0、8 108翻转后相同
  • 对于处理回文位置上的数,如果一个为 6 6 6,一个为 9 9 9,翻转后仍然相同。例如: 69 → 69 69→69 6969 609 → 609 609→609 609609
  • 这里需要注意 0 0 0不能放首位,否则翻转后必然相同与原数值不同。
  • 同时 6 6 6 9 9 9不能放到奇长度回文数的中间,否则翻转后必然与原数值相同。
  • 这块可以直接暴搜,因为考虑到长度最多为 10 10 10,枚举回文只需要枚举到一半,那么 10 × 5 5 = 31250 10\times 5^5=31250 10×55=31250,可以通过。
class Solution {
public:
    int confusingNumberII(int n) {
        int res = dp(n);
        string str = to_string(n);
        int m = str.size();
        for(int i = 1; i <= m; ++i) {
        	res -= dfs2(1, i, n);
		}
		return res;
    }
private:
    int f[40];
    int digit[40];
    
    int dp(int x) {
    	if(x == 0) return 0;
        memset(f, -1, sizeof f);
        int g = 0;
        while(x) digit[++g] = x % 10, x /= 10;
        return dfs1(false, true, g);
    }
    
    // 不含2,3,4,5,7的数的个数
    int dfs1(bool lead, bool limit, int dep) {
        if(dep == 0) return lead ? 1 : 0;
        if(lead && !limit && ~f[dep]) return f[dep];
        int last = limit ? digit[dep] : 9;
        
        int res = 0;
        for(int i = 0; i <= last; ++i)
            if(i != 2 && i != 3 && i != 4 && i != 5 && i != 7)
                res += dfs1(lead | i, limit && i == digit[dep], dep - 1);
        if(lead && !limit) f[dep] = res;
        return res;
    }
    
    // 计算不同长度的不含1,0,8构成的回文数 
    int nums[40];
    int dfs2(int u, int len, int n) {
    	if(u * 2 - 1 > len) {
    		long long sum = 0;
    		for(int i = 1; i <= len; ++i) 
    			sum = sum * 10 + nums[i];
    		return sum <= n;
		}
		
		int ans = 0;
		nums[u] = nums[len - u + 1] = 1;
		ans += dfs2(u + 1, len, n);
		nums[u] = nums[len - u + 1] = 8;
		ans += dfs2(u + 1, len, n);
		if(u > 1) {
			nums[u] = nums[len - u + 1] = 0;
		    ans += dfs2(u + 1, len, n);
		}
        if(u * 2 - 1 != len) {
            nums[u] = 6, nums[len - u + 1] = 9;
            ans += dfs2(u + 1, len, n);
            nums[u] = 9, nums[len - u + 1] = 6;
            ans += dfs2(u + 1, len, n);
        }
		return ans;
	}
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【LeetCode第2场双周赛】 的相关文章

  • 主板电源开关接口图解_主板跳线接法图解

    大家好 今天分享一篇来自装机吧官网 zhuangjiba com 的图文教程 大家有没有过兴奋的买齐了硬件 准备装机了 装到一半发现 哎呀 这机箱的主板跳线如何接呢 害怕接错一不小心就把主板和其他硬件给烧了咋办 其实这种情况小编以前自己装机
  • shell脚本中的花括号扩展

    shell脚本中的花括号扩展 在shell脚本中可以在花括号中使用一组以逗号分隔的字符串或者字符串序列来进行字符串扩展 最终输出的结果为以空格分隔的字符串 整数也可 root mao aliyunserver bin echo 1 10 1

随机推荐

  • OpenWrt 初始化(中文界面/挂载U盘/smb共享/分区/格式化)

    一 更换软件源 https mirrors tuna tsinghua edu cn openwrt 二 安装软件 中文界面 挂载U盘 smb共享 分区 格式化 网页终端 opkg update opkg install luci i18n
  • Module build failed: TypeError: Cannot read property ‘for‘ of undefined

    里面至少得有一个 确保每个页面只有一个标签 在这里插入图片描述 https img blog csdnimg cn 20210202230539530 png 然后就不报错了
  • 【转】详细解析电源滤波电容的选取与计算

    本文转载自电源联盟 电感的阻抗与频率成正比 电容的阻抗与频率成反比 所以 电感可以阻扼高频通过 电容可以阻扼低频通过 二者适当组合 就可过滤各种频率信号 如在整流电路中 将电容并在负载上或将电感串联在负载上 可滤去交流纹波 电容滤波属电压滤
  • 基于随机响应机制的本地差分隐私【谷歌】论文笔记

    RAPPOR Randomized Aggregatable Privacy Preserving Ordinal Response 论文阅读 写在前面的话 自己的理解 整理 攻击模型 注意事项 相关工作 总结 写在前面的话 这篇文章是我在
  • asyncio+requests个人笔记

    requests库结合asyncio 使用asyncio和requests库 由于request是同步的 会阻塞asyncio 所以为每个request请求都创建多一个事件轮询器 这边我理解是多一个事件轮询器对应一个多线程 去跑reques
  • AR互动技术是什么

    AR互动技术是什么 AR技术是属于对现实增强的技术 AR互动体验的互动性 创意性和高体验感的特点将成为商家和会展的选择 AR互动应用从普通的商城发展到科技馆 博物馆 甚至跨界到医疗 军事等方面 接下来由数字平原总结AR互动体验展示的优点在哪
  • Reinforcement Learning 强化学习(一)

    Task01 本次学习主要参照Datawhale开源学习及强化学习蘑菇书Easy RL 部分内容参考Shusen Wang的github开源项目DRL 第1章 强化学习基础 1 1 强化学习概述 强化学习 reinforcement lea
  • 概率统计——概率论与数理统计

    一 随机变量 1 1 概率 随机事件 A A A发生的可能性度量 称为 A A A发生的概率 记为 P
  • java入门二:java流程控制

    1 用户交互Scanner java util Scanner是Java5的新特性 可以通过Scanner类来获取用户的输入 基本语法 Scanner s new Scanner System in 通过Scanner类的next 与nex
  • 软件项目管理知识回顾---网络图

    网络图 9 网络图 9 1简介 1 分类 AOA 双代号 ADM AON PDM 单代号 前导图 2 活动的逻辑管理 头到头 尾 尾到头 尾 依赖关系 3 工序 紧前 紧后 9 2绘制规则 1 两个节点只能一条线 不能是平行线 平行的话就不
  • 开源网络引擎firefly:环境搭建

    原文来自 http blog csdn net losophy article details 17000769 我自己配置的时候修改了几处 一 安装Python windows下安装Python 1 下载对应系统的python版本 现在多
  • 基于三维激光点云的树木建模(枝叶分离)

    基于三维激光点云的树木建模 2019 05 30 三维激光点云数据采集 2019 06 15 点云的枝叶分离 树枝 树干提取 枝干骨架提取 枝干骨架优化 构建三维模型 测试软件 链接 https pan baidu com s 1LhxOg
  • Java的自动装箱与拆箱详细分析

    Java的自动装箱与拆箱详细分析 1 既然说是装箱与拆箱 那么到底是装的什么 拆的什么 装箱 将基本数据类型封装起来 用他对应的引用类 包装类 来处理 拆箱 就是把引用类里面的基本数据拆出来 2 说到了基础数据类型 Java中的基础数据类型
  • Prometheus怎么监控docker容器 给我个详细的教程

    Prometheus可以通过Docker容器服务检测来监控Docker容器 具体步骤如下 1 安装Prometheus和Node Exporter 并将它们部署到Docker容器中 2 在Prometheus配置文件中添加Node Expo
  • 集合(四):Map接口

    文章目录 1 Map的实现类的结构 2 HashMap的底层实现原理 以JDK7为说明 3 LinkedHashMap的底层实现原理 4 Map接口 常用方法 5 TreeMap 6 Properties 1 Map的实现类的结构 Map
  • Ubuntu中文件系统根目录上的磁盘空间不足的详细解决方案

    目录 Ubuntu中文件系统根目录上的磁盘空间不足的详细解决方案 一 问题提出 二 解决问题 2 1 安装gparted管理器 2 2 打开 2 3 右键点击分区 选择调整大小 移动 一 问题提出 在使用Ubuntu时 可能会出现下图中的提
  • Protobuf初次使用小记

    本来是正在研究学习netty 教程中出现了protobuf 索性仔细研究了一番 厚积薄发 说不定哪一天就突然要用到 protobuf是一种类似于json和xml的数据传输格式 优势在于高效的序列化和反序列化 关于这个 我没有去测试 只是把整
  • AT&T汇编指令介绍

    linux中使用的AT T格式的汇编指令 所以总结一下一些比较重要的指令 1 寻址模式 有多种不同的寻址模式 允许不同形式的存储器引用 我们用符号Ea表示任意寄存器 R Ea 表示它的值 M addr 表示addr处地址的值 题目 答案 0
  • 专业级技巧:利用Vue3 provide / inject机制更轻松地完成祖先和后代组件之间的通信管理

    部分数据来源 ChatGPT 简介 在 Vue 中 使用 props 和 emit 等方式可以实现祖先和后代组件之间的通信 但是当组件层级较多时 这种方式会比较繁琐和复杂 为了解决这个问题 Vue3 提供了新的 provide inject
  • 【LeetCode第2场双周赛】

    第 2 场双周赛 A 模拟 class Solution public int sumOfDigits vector