力扣题目训练(13)

2024年2月6日力扣题目训练

  • 2024年2月6日力扣题目训练
    • 492. 构造矩形
    • 495. 提莫攻击
    • 500. 键盘行
    • 166. 分数到小数
    • 199. 二叉树的右视图
    • 85. 最大矩形

2024年2月6日力扣题目训练

2024年2月6日第十三天编程训练,今天主要是进行一些题训练,包括简单题3道、中等题2道和困难题1道。惰性太强现在才完成,不过之后我会认真完成的。

492. 构造矩形

链接: 构造矩形
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
这道题本质就是暴力求解,但是注意要L和W之间差不多肯定是在平方根附近。
代码:

class Solution {
public:
    vector<int> constructRectangle(int area) {
        int W = sqrt(area);
        int L = area/W;
        vector<int> ans;
        while(L >= W){
            if(L * W == area){
                ans.push_back(L);
                ans.push_back(W);
                break;
            }
            W--;
            L = area / W;
        }
        return ans;
    }
};

495. 提莫攻击

链接: 提莫攻击
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
这道题可以单次扫描,在扫描过程中注意两次中毒是否有交集,有的话需要单独处理。
代码:

class Solution {
public:
    int findPoisonedDuration(vector<int>& timeSeries, int duration) {
        int ans = 0;
        if(timeSeries.size() == 0) return 0;
        int left = timeSeries[0],right = left+duration-1;
        ans += duration;
        for(int i = 1; i < timeSeries.size(); i++){
            if(timeSeries[i] <= right){
                ans += timeSeries[i]+ duration-1-right;
            }else{
                ans += duration;
            }
            left = timeSeries[i];
            right = timeSeries[i]+ duration-1;
        }
        return ans;
    }
};

500. 键盘行

链接: 键盘行
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:

这道题其实就是单次扫描,为了方便,我们为每一个英文字母标记其对应键盘上的行号,然后检测字符串中所有字符对应的行号是否相同。

代码:

class Solution {
public:

    vector<string> findWords(vector<string>& words) {
        vector<string> ans;
        string rowIdx = "12210111011122000010020202";
        for(auto &word : words){
            bool isValid = true;
            char idx = rowIdx[tolower(word[0]) - 'a'];
            for(int i = 1; i < word.size(); i++){
                if(rowIdx[tolower(word[i]) - 'a'] != idx){
                    isValid = false;
                    break;
                }   
            }
            if(isValid) ans.push_back(word);
        }
        return ans;
    }
};

166. 分数到小数

链接: 分数到小数
难度: 中等
题目:
题目描述

运行示例:
运行示例

思路:
这道题利用长除法,存在整数和小数部分,在处理小数部分时,需要将余数*10进行计算,而且如果存在循环还需要利用哈希表记录循环部分。
代码:

class Solution {
public:
    string fractionToDecimal(int numerators, int denominators) {
        string ans;
        long numerator = numerators;
        long denominator = denominators;
        if(numerator % denominator == 0) return to_string(numerator / denominator);
        if(numerator < 0 ^ denominator < 0 ) ans += '-';
        numerator = abs(numerator);
        denominator = abs(denominator);
        long intpart = numerator/denominator;
        ans += to_string(intpart) + '.';
        long rem = numerator % denominator;
        unordered_map<long, int> remainderIndexMap;
        int index = 0;
        string frapart;
        while(rem && !remainderIndexMap.count(rem)){
            remainderIndexMap[rem] = index;
            rem *= 10;
            frapart += to_string(rem/denominator);
            rem %= denominator;
            index++;
        }
        if(rem != 0){
            int indexs = remainderIndexMap[rem];
            frapart = frapart.substr(0,indexs)+'('+frapart.substr(indexs)+')';

        }
        ans+=frapart;
        return ans;
    }
};

199. 二叉树的右视图

链接: 二叉树的右视图
难度: 中等
题目:
题目描述

运行示例:
运行示例

思路:
这道题本质就是记录每层的最右节点值,所以可以用层次遍历。
代码:

class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {
        vector<int> ans;
        if(root == NULL) return ans;
        queue<TreeNode*> res;
        res.push(root);
        while(!res.empty()){
            int size = res.size();
            for(int i = 0 ; i < size; i++){
                TreeNode* curr = res.front();
                res.pop();
                if(i == size - 1){
                    ans.push_back(curr->val);
                }
                if(curr->left != NULL) res.push(curr->left);
                if(curr->right != NULL) res.push(curr->right);
            }
        }
        return ans;
    }
};

85. 最大矩形

链接: 最大矩形
难度: 困难
题目:
题目描述

运行示例:
运行示例

思路:
这道题与昨天的84. 柱状图中最大的矩形类似,只是在昨天的基础上多了几行,我们可以按行来判断。
代码:

class Solution {
public:
    int maximalRectangle(vector<vector<char>>& matrix) {
        int n = matrix.size();
        int m = matrix[0].size();
        if(n == 0) return 0;
        vector<vector<int>> heights(n,vector<int>(m,0));
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (matrix[i][j] == '1') {
                    heights[i][j] = (i == 0 ? 0: heights[i-1][j]) + 1;
                }
            }
        }
        int ans = 0;
        for (int i = 0; i < n; i++){
            vector<int> left(m,0),right(m,0);
            stack<int> st;
            for(int j = 0; j < m; j++){
                while(!st.empty() && heights[i][st.top()] >= heights[i][j]){
                    st.pop();
                }
                left[j] = (st.empty()? -1:st.top());
                st.push(j);
            }
            st = stack<int>();
            for(int j = m-1; j >= 0; j--){
                while(!st.empty() && heights[i][st.top()] >= heights[i][j]){
                    st.pop();
                }
                right[j] = (st.empty()? m:st.top());
                st.push(j);
            }
            for (int j = 0; j < m; j++) {
                ans = max(ans, (right[j] - left[j] - 1) * heights[i][j]);
            }
        }
        return ans;
    }
};

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

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

相关文章

【Redis】深入理解 Redis 常用数据类型源码及底层实现(4.详解Hash数据结构)

Hash数据结构 看过前面的介绍,大家应该知道 Redis 的 Hash 结构的底层实现在 6 和 7 是不同的,Redis 6 是 ziplist 和 hashtable,Redis 7 是 listpack 和 hashtable。 我们先使用config get hash*看下 Redis 6 和 Redis 7 的 Hash 结构配置情况(在Redis客户端的命令行界面…

图数据库 之 Neo4j - Cypher语法基础(5)

节点(Nodes) Cypher使用()来表示一个节点。 () # 最简单的节点形式&#xff0c;表示一个任意无特征的节点&#xff0c;其实就是一个空节点(movie) # 如果想指向一个节点在其他地方&#xff0c;我们可以给节点添加一个变量名(如movie)&#xff0c;表示一个变量名为 movie的节点…

后端扫盲系列 - vue入门指南

vue特点 组件化&#xff1a;用户界面分解为可重用的组件&#xff0c;这些组件可以使开发的页面更加模块化和可维护双向数据绑定&#xff1a;vue提供了一种轻松绑定数据和DOM元素之间的机制&#xff0c;意味着数据发送变化时&#xff0c;视图会自动更新&#xff0c;反之亦然虚拟…

阿里云香港轻量应用服务器怎么样,建站速度快吗?

阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品&#xff0c;中国电信CN2高速网络高质量、大规格BGP带宽&#xff0c;运营商精品公网直连中国内地&#xff0c;时延更低&#xff0c;优化海外回中国内地流量的公网线路&#xff0c;可以提高国际业务访问质量。阿里云服务…

华为配置旁挂二层组网直接转发示例

配置旁挂二层组网直接转发示例 组网图形 图1 配置旁挂二层组网直接转发示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户通过WLAN接入网络&#xff0c;以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff…

基于51/STM32单片机的智能药盒 物联网定时吃药 药品分类

功能介绍 以51/STM32单片机作为主控系统&#xff1b; LCD1602液晶显示当前时间、温湿度、药品重量 3次吃药时间、药品类目和药品数量 HX711压力采集当前药品重量 红外感应当前药盒是否打开 DS1302时钟芯片显示当前年月日、时分秒、星期 DHT11采集当前环境温度和湿度 …

STM32学习·HAL库·STM32CubeMX系列学习(安装和使用)

目录 ​编辑 1. STM32CubeMX简介 2. STM32CubeMX安装 2.1 STM32CubeMX软件获取 2.1.1 获取Java软件 2.1.2 STM32CubeMX软件获取 2.2 搭建Java运行环境 2.3 安装STM32CubeMX软件 2.4 下载和关联STM32cube固件包 1. STM32CubeMX简介 STM32CubeMX 是 ST 微电子公…

HarmonyOS router页面跳转

默认启动页面index.ets import router from ohos.router import {BusinessError} from ohos.baseEntry Component struct Index {State message: string Hello World;build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)//添加按钮&am…

nginx upstream server主动健康检测模块添加https检测功能[完整版]

目录 1 缘起1.1 功能定义2. 实现后的效果2.1 配置文件2.2 运行效果3. 代码实现3.1 配置指令3.1.1 配置指令定义:3.1.2 配置指令结构体:3.1.3 配置指令源码定义:3.2 模块的初始化3.3 添加新的健康检测类型的定义3.4 握手完成后的处理3. 5 发送http请求3.6 接收http响应3.7 连…

[Angular 基础] - 生命周期函数

[Angular 基础] - 生命周期函数 之前的笔记&#xff1a; [Angular 基础] - Angular 渲染过程 & 组件的创建 [Angular 基础] - 数据绑定(databinding) [Angular 基础] - 指令(directives) 以上为静态页面&#xff0c;即不涉及到跨组件交流的内容 以下涉及到组件内的沟通&a…

Halcon 元组/数组基本操作

Halcon 元组/数组基本操作 ** 元组/数组 tuple *******数组创建与字典******* ** 创建一个数组 A : [1,3,45,6] A[0] : 1 A[1] : 2** 定义一个key value字典类型create_dict (DictHandle) set_dict_tuple (DictHandle, test_tuple, A) set_dict_tuple (DictHandle, test_obj, …

CrossOver 24.0 让Mac可以运行Windows程序的工具

CrossOver 24.0最新版重点添加了对 DirectX 12 支持&#xff0c;从而在 Mac 上更好地模拟运行 Windows 游戏&#xff0c;开发者在 CrossOver 23 中可以调用 DirectX 12&#xff0c;在模拟游戏的过程中同时调用所有 GPU 核心&#xff0c;从而实现更优秀的渲染效果。 目前CrossOv…

android中实现底部导航栏

1、引言 底部导航栏在app应用中是十分常见了&#xff0c;大部分的安卓应用中也都实现了底部导航栏的功能&#xff0c;这里我就以我以前做的一个简单小说阅读软件为例&#xff0c;为大家演示一下底部导航栏的使用&#xff0c;需要的朋友直接复制代码过去改写就行了。 2、代码实…

Spark---环境搭建---入门概念

目录 环境搭建 测试 Apache Spark是用于大规模数据处理的统一分析引擎&#xff1b; spark 仅仅替代了hadoop的mapraduce&#xff1b; spark比hadoop快一百倍&#xff1b; 环境搭建 1&#xff1a;解压&#xff1b; 2&#xff1a;配置spark环境变量&#xff1a; vim /etc/pro…

Quartz---JobDataMap使用的两种方式

任务调度执行原理图&#xff1a; JobDataMap的使用 JobDataMap是Quartz调度器中的一个重要组件&#xff0c;主要用于存储和传递与作业&#xff08;Job&#xff09;相关的数据。它是一个实现了Java Map接口的对象&#xff0c;可以用来保存一系列的序列化的对象。这些对象在作业执…

51_蓝桥杯_数码管静态显示

一 电路 二 数码管静态显示工作原理 三 代码 代码1 实现第一个数码管显示数字6的功能 #include "reg52.h"unsigned char code SMG_Duanma[18] {0xc0,0xf9.0xa4,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc0,0x86,0x8e,0xbf,0x7f};void Delay(unsignde int t) {wh…

Android下SF合成流程重学习之GPU合成

Android下SF合成流程重学习之GPU合成 引言 SurfaceFlinger中的图层选择GPU合成(CLIENT合成方式)时&#xff0c;会把待合成的图层Layers通过renderengine(SkiaGLRenderEngine)绘制到一块GraphicBuffer中&#xff0c;然后把这块GraphicBuffer图形缓存通过调用setClientTarget传递…

Python中基于匹配项的子列表列表串联

正常我们在使用python爬虫时候&#xff0c;尤其在用python开发时&#xff0c;想要基于匹配项将子列表串联成一个列表&#xff0c;我们可以使用列表推导式或循环来实现&#xff0c;这两种方法都可以根据匹配项将子列表串联成一个列表。请根据你的实际需求选择适合的方法。具体情…

推荐彩虹知识付费商城免授权7.0源码

彩虹知识付费商城免授权7.0源码&#xff0c;最低配置环境 PHP7.2 1、上传源码到网站根目录&#xff0c;导入数据库文件&#xff1a;xydai.sql 2、修改数据库配置文件&#xff1a;/config.php 3、后台&#xff1a;/admin 账号&#xff1a;admin 密码&#xff1a;123456 4、前…

C++初阶(十三) 模板

一、非类型模板参数 模板参数分类类型形参与非类型形参。类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常量…