TikTok真题第9天 | 163.缺失的区间、1861.旋转箱子、2217.找到指定长度的回文数

163.缺失的区间

题目链接:163.missing-ranges

解法:

基本逻辑是,依次遍历nums中的所有的元素,判断这个元素(right)和上一个元素(left)的差值是否>=2,如果是,那么缺失区间为[left+1, right-1]。比如上一个为1,当前为3,那么缺失的区间为[2,2],如果上一个为1,当前为4,那么缺失的区间为[2,3]。都满足[left+1, right-1]这个逻辑。

但是lower和upper这两个端点需要单独考虑,因为lower本身可能就是缺失区间的左区间,upper本身可能就是缺失区间的右区间(闭区间)。

另外整数操作可能会溢出,因为32 位的 int 类型可以安全地表示的十进制数的范围大约是 −10^(9)到10^(9), 所以lower如果是10^(-9),那么lower-1就会溢出了。

下面给出了两种写法,第一种可以自动处理边界条件,可能会溢出,但是提交后通过了。第二种写法代码量大一些,但是清晰,而且没有溢出风险。

边界条件:nums为空

时间复杂度:O(n),n为nums的长度

空间复杂度:

class Solution {
public:
    vector<vector<int>> findMissingRanges(vector<int>& nums, int lower, int upper) {
        vector<vector<int>> res;
        // lower本身要包含进去,所以left的起始值取lower-1
        // 这里可能溢出
        int left = lower - 1;
        for (int right: nums) {
            // 这里可能溢出
            int val = right - left;
            if (val > 1) {
                res.push_back({left+1, right-1});
            }
            left = right;
            }
        // upper如果不在nums中,那么upper本身也要包含进去
        if (upper > left) {
            res.push_back({left+1, upper});
        } 
        return res;
    }
};
class Solution {
public:
    vector<vector<int>> findMissingRanges(vector<int>& nums, int lower, int upper) {
        vector<vector<int>> res;
        // 如果nums为空,那么就是[lower, upper]
        if (nums.empty()) {
            res.push_back({lower, upper});
            return res;
        }

        // 处理lower为左区间的情况
        if (lower < nums[0]) {
            res.push_back({lower, nums[0]-1});
        }
        
        for (int i=1; i<nums.size(); i++) {
            int left = nums[i-1];
            int right = nums[i];
            if (right > (left + 1)) {
                res.push_back({left+1, right-1});
            }
        }
        // 处理upper为右区间的情况
        if (upper > nums.back()) {
            res.push_back({nums.back()+1, upper});
        } 
        return res;
    }
};

1861.旋转箱子

题目链接:1861.rotating-the-box

解法:

先将数组旋转90°,如果m和n分别是原箱子box的行数和列数,那么旋转后的箱子满足 rBox[j][m-1-i] = box[i][j]。

定义一个变量,是石头能落下的最低位置 cur。然后再从最底部开始,往上遍历,把石头放到落下的最低位置,再更新这个最低位置。

如果当前是空的,那么最低位置不变,因为没有石头落下去占据最低位置,也没有障碍挡住石头下落。如果当前是障碍,那么石头只能落在障碍上面了,于是最低位置是障碍上面。如果当前是石头,那么石头会落下,最低位置往上挪一位,也就是 cur--。

有种情况下石头能落下的最低位置,本身就已经是石头了,也不用单独考虑,就算是落在了原地。

参考题解:旋转箱子

边界条件:无

时间复杂度:O(mn)

空间复杂度:O(mn),mn为返回结果的空间,如果不计,那就是O(1)

class Solution {
public:
    vector<vector<char>> rotateTheBox(vector<vector<char>>& box) {
        // m、n分别是原box的行数和列数
        int m = box.size();
        int n = box[0].size();
        // 对箱子进行旋转
        vector<vector<char>> rBox(n, vector<char>(m));
        for (int i=0; i<m; i++) {
            for (int j=0; j<n; j++) {
                rBox[j][m-1-i] = box[i][j];
            }
        }
        // n、m分别是旋转box的行数和列数,先从第一列开始
        for (int j=0; j<m; j++) {
            // 当前石头能放置的最低位置
            int cur = n - 1;
            // 从最后一行往上遍历
            for (int i=n-1; i>=0; i--) {
                // 如果是障碍物,那么上面一行才是最低位置
                if (rBox[i][j] == '*') {
                    cur = i - 1;
                // 如果是石头,那么往下落到最低位置
                } else if (rBox[i][j] == '#') {
                    rBox[i][j] = '.';
                    rBox[cur][j] = '#';
                    cur--;
                }
            }
        }
        return rBox;
    }
};

2217.找到指定长度的回文数

题目链接:2217.find-palindrome-with-fixed-length

解法:

这道题已经不知道该怎么评价了,因为一些公式也不知道咋来的。有俩公式得记住,一个是根据 intLength 求回文数的左半部分,一个是更具 intLength 求回文数的个数。

(1)如果回文数的长度为 intLength,那么第q位回文数的左半部分(回文数是奇数,那么包含中间的那个数)的计算公式如下。表示 (intLength - 1) / 2 再向下取整。怎么来的咱也不知道。

(2)求出左半部分后,可以对左半部分翻转,得到右半部分,再拼接,就得到了回文数。如果回文数是奇数,那么翻转后得去掉第一位(也就是左半部分的最后一位)。

(3)题目中说了如果第q位不存在回文数,那么返回为-1。为啥可能不存在呢?因为给定 intLength,回文数的个数是有限的。如果q超出了回文数的个数,那么就不存在了。比如长度为3,那么回文数的左半部分为10,11,12,..., 99,那么一共有99-10+1=90个回文数。于是q必须小于等于90。

那么怎么根据 intLength知道有多少个回文数呢?有些题解给出的是 9 * base,这个base是如下的数。咱也不知道它咋来的。

(4)由于length的最大长度为15,意味着回文数得用64位的整型表示,在 c++中是long long类型。

参考题解:回文数

边界条件:无

时间复杂度:O(N∗intLength), N为 queries.length,翻转字符串的时间复杂度为O(intLength)

空间复杂度:O(intLength),返回的结果不计入空间。

class Solution {
public:
    vector<long long> kthPalindrome(vector<int>& queries, int intLength) {
        vector<long long> res;
        int base = pow(10, (intLength-1)/2);
        // 回文数的个数
        int cnt = 9 * base;
        for (int q: queries) {
            if (q > cnt) {
                res.push_back(-1);
                continue;
            }
            int left = base + q - 1;
            string str_left = to_string(left);
            string str_right = str_left;
            reverse(str_right.begin(), str_right.end());
            if (intLength % 2 == 1) {
                str_right.erase(str_right.begin());
            }
            str_left += str_right;
            // 把字符串转为long
            res.push_back(stol(str_left));
        }
        return res;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cisco模拟器-跨交换机实现VLAN

计要求将两台相互连接的交换机上的VLAN号全局使用&#xff0c;技术上可以使用TRUNK技术的数据包标记功能来实现。 通过设计&#xff0c;可以对多台交换机进行整合&#xff0c;提高网络设备的利用率、降低网络工程的成本&#xff0c;同时也可以简化网络配置。 交换机0配置&…

【privateGPT】使用privateGPT训练您自己的LLM

了解如何在不向提供商公开您的私人数据的情况下训练您自己的语言模型 使用OpenAI的ChatGPT等公共人工智能服务的主要担忧之一是将您的私人数据暴露给提供商的风险。对于商业用途&#xff0c;这仍然是考虑采用人工智能技术的公司最大的担忧。 很多时候&#xff0c;你想创建自己…

.FileZilla的使用和主动模式被动模式介绍

FileZilla的使用和主动模式被动模式介绍 1.FileZilla的使用和主动模式被动模式介绍1.安装下载2.新建组和用户2.1打开后出现如下界面2.2点击编辑打开组这个选项2.3点击添加组以后&#xff0c;点击确认2.4输入组的名称&#xff0c;列如我输入的niyin2.5点击用户选项2.6像上面一样…

Winform RDLC报表(数据库连接、报表函数使用、动态表头)

文章目录 NuGet安装库数据库连接报表设计报表引用添加报表 数据集设计方法一手动添加方法二——连接数据库添加 关联报表与数据集表格数据与数据集数据设计表格格式、字体设计报表数据字段绑定 Winform 使用报表控件数据库填充数据集从数据库获取与数据源相同字段的数据 动态表…

关于求定积分的反函数的导数【认清原函数x变量和反函数x变量】

如图碰到该题该怎么解&#xff1f; 在纸上按①②③的顺序写出这个&#xff0c;其中①是最主要的 第②步和第③步就是在用反函数时要用到的逻辑思维&#xff0c;不是一起用的&#xff0c;你需要用②才去用②&#xff0c;你需要用③才去用③ 在纸上先写出第①步&#xff0c;即 其…

【Linux操作系统】探秘Linux奥秘:操作系统的入门与实战

&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《操作系统实验室》&#x1f516;诗赋清音&#xff1a;柳垂轻絮拂人衣&#xff0c;心随风舞梦飞。 山川湖海皆可涉&#xff0c;勇者征途逐星辉。 目录 &#x1fa90;1 初识Linux OS …

css实现一个斑马条纹动画,实现一个理发店门口的小转转,进度条动画同理!

css实现一个斑马条纹动画&#xff0c;实现一个理发店门口的小转转 前置基础知识 css背景background的重复渐变属性repeating-linear-gradient() 该属性类似于linear-gradient(),但他会在整个方向上重复渐变以覆盖整个容器 一、先写一个普通渐变例子linear-gradient() &…

leetcode贪心算法题总结(三)

本章目录 1.合并区间2.无重叠区间3.用最少数量的箭引爆气球4.整数替换5.俄罗斯套娃信封问题6.可被三整除的最大和7.距离相等的条形码8.重构字符串 1.合并区间 合并区间 class Solution { public:vector<vector<int>> merge(vector<vector<int>>&…

ZigBee案例笔记 - 无线点灯

文章目录 无线点灯实验概述工程关键字工程文件夹介绍Basic RF软件设计框图简单说明工程操作Basic RF启动流程Basic RF发送流程Basic RF接收流程 无线点灯案例无线点灯现象 无线点灯实验概述 ZigBee无线点灯实验&#xff08;即Basic RF工程&#xff09;&#xff0c;由TI公司提供…

第一讲:BeanFactory和ApplicationContext

BeanFactory和ApplicationContext 什么是BeanFactory 它是ApplicationContext的父接口它才是Spring的核心容器&#xff0c;主要的ApplicationContext实现都组合了它的功能 BeanFactory能做什么? 表面上看BeanFactory的主要方法只有getBean()&#xff0c;实际上控制反转、基…

Spring-5-切入点的高级使用

Spring提供了两个额外的Pointcut实现&#xff0c;分别是ComposablePointcut和ControlFlowPointcut,它们提供了所需的灵活性。 使用控制流切入点 由ControlFlowPointcut类实现的Spring控制流切入点类似于许多其他AOP实现中可用的cflow构造&#xff0c;尽管功能上没有那么强大。…

(self-supervised learning)Event Camera Data Pre-training

Publisher: ICCV 2023 MOTIVATION OF READING: 自监督学习、稀疏事件 NILM link: https://arxiv.org/pdf/2301.01928.pdf Code: GitHub - Yan98/Event-Camera-Data-Pre-training 1. Overview Contributions are summarized as follows: 1. A self-supervised framework f…

“产品经理必懂的关键术语“

产品经理是现代企业中非常重要的一个角色&#xff0c;他们负责制定产品策略、规划产品开发流程、管理产品质量和用户反馈等等。然而&#xff0c;对于产品经理来说&#xff0c;了解并掌握相关的专业术语是非常重要的。本篇文章会介绍一些产品经理需要掌握的专业术语&#xff0c;…

一篇文章掌握系统架构的演变和常见微服务框架

目录 前言 一、系统架构的演变 1、单体应用架构 优点&#xff1a; 缺点&#xff1a; 2、垂直应用架构 优点&#xff1a; 缺点&#xff1a; 3、分布式SOA架构 3.1 什么是SOA 3.2 SOA架构 优点&#xff1a; 缺点&#xff1a; 4、微服务架构 优点&#xff1a; 缺点…

eve环境虚拟机和电脑如何传送文件

一.桥接 &#xff08;实现电脑和虚拟机在同一网段&#xff09; 虚拟机上网盘设置 二.属性---文件共享设置 1打开属性&#xff0c;点击共享 2.添加共享人为全部人&#xff0c;并修改权限为读写模式 3.点击高级共享&#xff0c;选定此文件夹 4.点击网络和共享中心&#xff0c;划…

C++——智能指针和RAII

该文章代码均在gitee中开源 C智能指针hpphttps://gitee.com/Ehundred/cpp-knowledge-points/tree/master/%E6%99%BA%E8%83%BD%E6%8C%87%E9%92%88​​​​​​​ 智能指针 传统指针的问题 在C自定义类型中&#xff0c;我们为了避免内存泄漏&#xff0c;会采用析构函数的方法释…

2023年末,软件测试面试题总结与分享

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;得准备年后面试了&#xff0c;又不知道从何下手&#xff01;为了帮大家节约时间&#xff0c;特意准备了一份面试相关的资料&#xff0c;内容非常的全面&#xff0c;真的可以好好补一补&#xff0c;希望大家在都能拿到…

分享Python采集40个NET整站程序源码,总有一款适合您

分享Python采集40个NET整站程序源码&#xff0c;总有一款适合您 Python采集的40个NET整站程序源码下载链接&#xff1a;https://pan.baidu.com/s/1z54JHJkFYa4Kx2oBtPrn_w?pwd2ta4 提取码&#xff1a;2ta4 商品评论网站系统 小孔子内容管理系统XkCms V2.0 友间别墅整站程…

实现二叉树的基本操作与OJ练习

目录 1.二叉树的基本操作 1.1二叉树基本操作完整代码 1.2检测value值是否存在 1.3层序遍历 1.4判断一棵树是不是完全二叉树 2.OJ练习 2.1平衡二叉树 2.2对称二叉树 2.3二叉树遍历 1.二叉树的基本操作 1.1二叉树基本操作完整代码 public class BinaryTree {static…

【Unity】【FBX】如何将FBX模型导入Unity

【背景】 网上能够找到不少不错的FBX模型资源&#xff0c;大大加速游戏开发时间。如何将这些FBX导入Unity呢&#xff1f; 【步骤】 打开Unity项目文件&#xff0c;进入场景。 点击Projects面板&#xff0c;右键选择Import New Assets 选中FBX文件后导入。Assets文件夹中就会…