力扣题目训练(3)

2024年1月27日力扣题目训练

  • 2024年1月27日力扣题目训练
    • 290. 单词规律
    • 292. Nim 游戏
    • 303. 区域和检索 - 数组不可变
    • 91. 解码方法
    • 92. 反转链表 II
    • 41. 缺失的第一个正数

2024年1月27日力扣题目训练

2024年1月27日第三天编程训练,今天主要是进行一些题训练,包括简单题3道、中等题2道和困难题1道,昨天没有做完,自制力还是不行,我写这个的初衷只是为了记录自己每天干了什么,希望能坚持下去。

290. 单词规律

链接: 丑数
难度: 简单
题目:题目描述
运行示例:
运行示例
思路:
由题目可知,这是一个映射关系,可以利用哈希表来做,但是只用一个哈希表无法完成双向绑定的效果故需要利用两个哈希表。
代码:

class Solution {
public:
    bool wordPattern(string pattern, string s) {
        unordered_map<char,string> map;
        unordered_map<string,char> rmap;
        vector<string> vtr;
        int t =-1;
        for(int i = 0 ; i < s.size(); i++){
           if(s[i] == ' '){
               t += 1;
               vtr.push_back(s.substr(t,i-t));
               t = i;
           }
        }
        vtr.push_back(s.substr(t+1,s.size()-1));
        int n = pattern.size();
        int m = vtr.size();
        if(m != n) return false;
        for(int i = 0; i < n; i++){
            map[pattern[i]] = vtr[i];
            rmap[vtr[i]] = pattern[i];
        }
        for(int i = 0; i < n; i++){
            if( map[pattern[i]] != vtr[i] || pattern[i] != rmap[vtr[i]]) return false;
        }
        return true;
    }
};

292. Nim 游戏

链接: 游戏
难度: 简单
题目:
题目描述
运行示例:
运行示例

思路:
数学问题,当自己面对4块石头时,无论怎样都无法胜出,故需避免总的石头数目为 4 的倍数。
代码:

class Solution {
public:
    bool canWinNim(int n) {
        return n%4 != 0;
    }
};

303. 区域和检索 - 数组不可变

链接: 区域和检索
难度: 简单
题目:
题目描述
运行示例:
运行示例

思路:
这道题目如果单纯的用循环相加也能做,但是很有可能时间超过,所以我采用的是求前项和,要求指定区间内的和可以相减即可。
代码:

class NumArray {
public:
    vector<int> sums;
    NumArray(vector<int>& nums) {
        sums.push_back(nums[0]);
        for(int i = 1; i < nums.size(); i++){
            sums.push_back(sums[i-1]+nums[i]);
        }

    }
    
    int sumRange(int left, int right) {
        if(left == 0) return sums[right];
        return sums[right]-sums[left-1];
    }
};

91. 解码方法

链接: 解码
难度: 中等
题目:
题目描述
运行示例:
运行示例

思路:
我是用递归做的,结果时间超过了。我看了解析是用动态规划做的,原因是当前字母的解码方法可以看做前面的解码方方法加上这个字母的解码方法。f[i]可以看作字符串 s的前 i个字符 s[1…i]s[1…i]s[1…i] 的解码方法数。
代码:

class Solution {
public:
    int numDecodings(string s) {
        int n = s.size();
        vector<int> f(n+1);
        f[0] = 1;
        for(int i = 1; i <= n; i++){
            if(s[i-1] != '0'){
                f[i] += f[i-1];
            }
            if(i > 1 && s[i - 2] != '0' && ((s[i - 2] - '0') * 10 + (s[i - 1] - '0') <= 26)  ){
                f[i] += f[i-2];
            }
        }
        return f[n];
    }
};

92. 反转链表 II

链接: 反转链表
难度: 中等
题目:
题目描述
运行示例:
运行示例
思路:
一次遍历的话就用头插法进行实现,注意给的head是不带头指针的,所以为了方便起见可以创建一个带头指针的链表。
代码:

class Solution {
public:
    ListNode* reverseBetween(ListNode* head, int left, int right) {
        if(left >= right) return head;
        ListNode *dummyNode = new ListNode(-1);
        dummyNode->next = head;
        ListNode*p,*q,*curr;
        p = dummyNode;
        for(int i = 0; i < left-1; i++){
            p = p->next;
        }
        curr = p->next;
        for(int i = 0; i < right - left; i++){
            q = curr->next;
            curr->next = q->next;
            q->next = p->next;
            p->next = q;
        }
        return dummyNode->next;
    }
};

41. 缺失的第一个正数

链接: 缺失的正数
难度: 困难
题目:
题目描述

运行示例:

运行示例

思路:
对于一个长度为 N 的数组,其中没有出现的最小正整数只能在 [1,N+1] 中.我用的是哈希表的思路,但是空间复杂度不符合题意。我看了题解,他们用的是置换和搞一个标记。置换是指将出现过的的整数置换到数组的对应位置,大于n+1的直接舍弃。搞一个标记即对出现过的整数在数组对应位置上加一个负号,然后遍历第一个是正数的位置即为结果。

代码:
置换:

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int n = nums.size();
        for(int i = 0; i < n; i++){
            while(nums[i] > 0 && nums[i] <= n && nums[nums[i] -1 ] != nums[i]){
                swap(nums[nums[i] - 1], nums[i]);
            } 
        }
        for(int i = 0; i < n; i++){
            if(nums[i] != i+1){
                return i + 1;
            }
        }
        return n + 1;
    }
};

标记

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int n = nums.size();
        for(int i = 0; i < n; i++){
            if(nums[i] <= 0){
                nums[i] = n + 1;
            }
        }
        for(int i = 0; i < n; i++){
            int num = abs(nums[i]);
            if(num <= n){
                nums[num - 1] = -abs(nums[num - 1]);
            }
        }
        for(int i = 0; i < n; i++){
            if(nums[i] > 0 ){
                return i + 1;
            }
        }
        return n + 1;
    }
};

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

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

相关文章

大数据Doris(六十一):SQL函数之Bitmap函数

文章目录 SQL函数之Bitmap函数 一、BITMAP_AND(BITMAP lhs, BITMAP rhs)

用C#实现最小二乘法(用OxyPlot绘图)

最小二乘法介绍✨ 最小二乘法&#xff08;Least Squares Method&#xff09;是一种常见的数学优化技术&#xff0c;广泛应用于数据拟合、回归分析和参数估计等领域。其目标是通过最小化残差平方和来找到一组参数&#xff0c;使得模型预测值与观测值之间的差异最小化。 最小二…

小白都会的幻兽帕鲁服务器搭建教程(详细图文)

​  简介&#xff1a;由于幻兽帕鲁游戏的火爆&#xff0c;导致其官方服务器频现游戏卡顿掉线&#xff0c;为了能够正常流畅的体验幻兽帕鲁&#xff0c;有不少人都搭建了幻兽帕鲁服务器(私服)&#xff0c;网上虽然也有很多幻兽帕鲁服务器搭建教程&#xff0c;但内容专业性有点…

qq通讯录怎么关闭?QQ好友删除了怎么恢复?

在QQ中&#xff0c;通讯录是我们管理好友和进行聊天的重要工具&#xff0c;但有时候我们可能需要一些隐私保护&#xff0c;不让一些用户通过手机通讯录添加自己。如果您正在思考qq通讯录怎么关闭以及恢复意外删除的好友&#xff0c;本文将为您详细介绍如何关闭QQ通讯录和恢复被…

Java开发秘籍:实战公众号开发指南

目录 第一章&#xff1a;公众号开发简介 1.1 什么是公众号开发 1.2 公众号开发的意义和应用场景 1.3 公众号开发的技术要求和基础知识 第二章&#xff1a;搭建公众号开发环境 2.1 配置Java开发环境 2.2 下载和安装开发工具 2.3 设置公众号开发所需的配置文件 第三章&a…

2024阿里云和腾讯云的第一战打响:搭建《幻兽帕鲁》私服游戏

为了搭建《幻兽帕鲁》游戏私服&#xff0c; 2024年阿里云 VS 腾讯云的第一场战争开始了…… 事情是这样的&#xff1a; 1月19日&#xff0c;最离谱新游 《幻兽帕鲁》突然爆火了&#xff0c;这是一款日本开发商展耗费4年开发的冒险类游戏&#xff0c;这款戏一推出就迅速俘获了…

优思学院|精益管理如何判定哪些活动是增值或非增值?

“时间就是金钱”——这句老话我们都耳熟能详。但在工作中&#xff0c;我们真正从事的、对组织增加价值的活动有多少呢&#xff1f;我们常常认为自己的每一项任务都是维持运营的关键。然而&#xff0c;当我们从精益管理的视角进行分析&#xff0c;可能会惊讶地发现&#xff0c;…

蓝牙----蓝牙连接建立_连接建立

蓝牙----蓝牙连接建立_连接建立 蓝牙连接建立过程图1.主机扫描到广播包1.1判断是否是自己关心的广播包1.2广播地址添加到扫描列表 2.主机扫描结束&#xff0c;建立连接3.主从连接成功后&#xff0c;执行连接建立后事件3.1.主机将连接句柄和设备地址添加到连接列表3.2.主机进行G…

spring boot学习第八篇:操作elastic search的索引和索引中的数据

前提参考&#xff1a;elastic search入门-CSDN博客 前提说明&#xff1a;已经安装好了elastic search 7.x版本&#xff0c;我的es版本是7.11.1 1、 pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns&q…

C++ QT入门1——记事本基础功能实现(基本控件布局+信号与槽+文件类操作)

C QT入门1——记事本基础功能实现&#xff08;基本控件布局信号与槽文件类操作&#xff09; 一、UI界面的基础设置样式表通用配置通过样式表设置按钮三态以图片作为按钮背景 二、按键响应——☆信号与槽信号与槽基本概念按键QPushButton设置信号与槽自定义信号与槽自定义信号与…

【TCP】重传与超时机制

前言 在网络通信的世界里&#xff0c;传输控制协议&#xff08;TCP&#xff09;扮演着一个至关重要的角色。它确保了数据的可靠传输&#xff0c;就像邮差确保每一封信都能准确无误地送达收件人手中一样。但是&#xff0c;网络环境充满了不确定性&#xff0c;数据包可能会因为各…

云堡垒机是软件堡垒机吗?是一种产品吗?

很多小伙伴傻傻分不清楚云堡垒机和软件堡垒机&#xff1f;在问云堡垒机是软件堡垒机吗&#xff1f;是一种产品吗&#xff1f;两者有区别吗&#xff1f;今天我们大家就来一起探讨下&#xff0c;仅供参考哦&#xff01; 首先我们需要知道的是&#xff0c;云堡垒机和软件堡垒机是两…

数字美妆技术:美颜SDK和动态贴纸技术的崭新时代

数字美妆的兴起标志着人们对于自身形象的追求不再局限于现实生活&#xff0c;而是延伸到了虚拟世界。同时&#xff0c;美颜SDK的动态贴纸技术也开始进入到大家的视野之中。 一、美颜SDK&#xff1a;技术之作 通过复杂的图像处理算法&#xff0c;美颜SDK能够实时检测人脸&…

AWS 专题学习 P10 (Databases、 Data Analytics)

文章目录 专题总览1. Databases1.1 选择合适的数据库1.2 数据库类型1.3 AWS 数据库服务概述Amazon RDSAmazon AuroraAmazon ElastiCacheAmazon DynamoDBAmazon S3DocumentDBAmazon NeptuneAmazon Keyspaces (for Apache Cassandra)Amazon QLDBAmazon Timestream 2. Data & …

用java识别出文本中的文字并用in进行拼接

用java识别出来文本&#xff08;txt&#xff09;中的文字&#xff0c;并用in进行拼接。 话不多少&#xff0c;直接上代码。 先看结果 待转换数据&#xff1a; 处理结果&#xff1a; 代码如下&#xff1a; import java.io.*; import java.util.ArrayList; import java.util.Li…

高原涡轮增压20KVA柴油发电机产品样册

高原涡轮增压20KVA柴油发电机产品样册 大泽动力柴油发电机产品品质性能稳定、功率大、维修率好低、能适应各种恶劣环境以及高海拔地区使用&#xff1b; 发电机波形畸变率小于5%&#xff0c;适合给精密设备供电。功率衰减低&#xff0c;机组输出稳定&#xff1b;无励磁绕组&…

毕业找工作只会C语言是不是完蛋了?

今日话题&#xff0c;毕业找工作只会C语言是不是完蛋了&#xff1f;不必担心&#xff0c;C语言是一门非常有价值的编程语言&#xff0c;拥有广泛的应用领域&#xff0c;包括系统编程、嵌入式系统和驱动程序开发&#xff0c;为你提供了多样化的就业机会。学习C语言还有助于深入理…

DjangoURL调度器(一)

一、介绍 当一个用户请求 Django 站点的一个页面&#xff0c;下面是 Django 系统决定执行哪个 Python 代码使用的算法&#xff1a; Django确定要使用的根URLconf模块&#xff0c;一般是在settings中的ROOT_URLCONF设置的值&#xff0c;但是如果传入 HttpRequest 对象具有一个ur…

影响可变利差有几个因素,Anzo Capital昂首资本再说两个

在之前的文章中&#xff0c;Anzo Capital昂首资本抛砖引玉说了影响可变利差的两个因素&#xff0c;后台评论区也是热闹非凡&#xff0c;纷纷留言讨论&#xff0c;攻陷了评论区&#xff0c;今天Anzo Capital昂首资本就把各位投资者的留言进行整理&#xff0c;继续补充影响可变…

航空MRO行业研究:2027年全球市场将达1200亿美元

随着全球航空运输业的不断发展&#xff0c;越来越多的航空器进入了使用年限&#xff0c;需要进行维修、修理和大修。这促进了航空MRO市场的不断增长。此外&#xff0c;航空器设备和技术的不断更新换代&#xff0c;也对航空MRO市场带来了新的机遇和挑战。 航空MRO市场是指维修、…
最新文章