力扣题目训练(1)

news2024/11/16 19:39:41

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

  • 2024年1月25日力扣题目训练
    • 225. 用队列实现栈
    • 257. 二叉树的所有路径
    • 258. 各位相加
    • 81. 搜索旋转排序数组 II
    • 82. 删除排序链表中的重复元素 II
    • 30. 串联所有单词的子串

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

2024年1月25日开始进行编程训练,今天主要是进行一些题训练,包括简单题3道、中等题2道和苦难题1道。

225. 用队列实现栈

链接: 队列实现栈
难度: 简单
题目:
题目描述
运行示例:
运行示例
思路:
栈:先进后出
队列:先进先出
利用两个队列实现栈queue1,queue2,queue1用于存放先存入的数字,queue1与queue2实现栈,queque2先保存新进入的数字,然后再将queue1的数字存入到queue2中,再将queque2与queue1交换即可。
出栈直接从queue1中出栈。
代码:

class MyStack {
public:
    queue<int> queue1;
    queue<int> queue2;
    MyStack() {
    }
    
    void push(int x) {
        queue2.push(x);
        while(!queue1.empty()){
            queue2.push(queue1.front());
            queue1.pop();
        }
        swap(queue1,queue2);
    }
    
    int pop() {
        int r  = queue1.front();
        queue1.pop();
        return r;

    }
    
    int top() {
        int r  = queue1.front();
        return r;

    }
    
    bool empty() {
        return queue1.empty();
    }
};

257. 二叉树的所有路径

链接: 二叉树
难度: 简单
题目:
题目描述
运行示例:
运行示例
思路:
本质就是二叉树的遍历,用DFS算法即可解决。
代码:

class Solution {
public:
    void dfs(TreeNode* root, string path, vector<string>& paths){
        if(root != NULL){
            path +=to_string(root->val);
            if(root->left == NULL && root->right == NULL){
                paths.push_back(path);
            }else{
                path += "->";
                dfs(root->left,path,paths);
                dfs(root->right,path,paths);
            }
        }else{
            return;
        }
        
    }
    vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> paths;
        dfs(root, "", paths);
        return paths;

    }
};

258. 各位相加

链接: 各位相加
难度: 简单
题目:
题目描述
运行示例:
运行示例
思路:
我主要是利用暴力法解决的,官方是数学方法。
在这里插入图片描述
在这里插入图片描述

代码:
暴力法

class Solution {
public:
    int addDigits(int num) {
        if(num >= 0 && num <= 9){
            return num;
        }
        long sum = 0;
        while(num){
            sum+=num%10;
            num /= 10;
        }
        return addDigits(sum);
    }
};

数学法

class Solution:
    def addDigits(self, num: int) -> int:
        if num==0:
            return 0
        if num%9==0:
            return 9
        return num%9

81. 搜索旋转排序数组 II

链接: 旋转排序数组
难度: 中等
题目:
题目描述

运行示例:
运行示例
思路:
排序题一般是利用二分法,虽然这个数组是被旋转的但是基本上排序没有变,所以二分法还可以用,这个题中有重复元素,所以应该跳过。
代码:

class Solution {
public:
    bool search(vector<int>& nums, int target) {
        int n = nums.size();
        if (n == 0) {
            return false;
        }
        if (n == 1) {
            return nums[0] == target;
        }
        int begin = 0,end = n - 1;
        while(begin <= end){
            int mid = (begin+end)/2;
            if(nums[mid] == target) return true;
            if(nums[begin] == nums[mid] && nums[mid] == nums[end]){
                begin++;
                end--;
            }else if(nums[begin] <= nums[mid]){
                if (nums[begin] <= target && target < nums[mid]) {
                    end = mid - 1;
                }else{
                    begin = mid + 1;
                }
            }else{
                if(nums[mid] < target && target <= nums[n-1]){
                    begin = mid + 1;
                }else{
                    end = mid - 1;
                }  
            }
        }
        return false;

    }
};

82. 删除排序链表中的重复元素 II

链接: 排序链表
难度: 中等
题目:
题目描述

运行示例:
运行示例
思路:
因为链表已经排序,所以重复的数字是连续的,故一次遍历即可。
代码:

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(!head){
            return head;
        }
       ListNode* p= new ListNode(0, head);
        ListNode*curr = p;
        while(curr->next && curr->next->next){
            if(curr->next->val == curr->next->next->val){
                int x = curr->next->val;
                while(curr->next && curr->next->val == x){
                    curr->next = curr->next->next;
                }
            }else{
                curr = curr->next;
            }
        }
        return p->next;
    }
};

30. 串联所有单词的子串

链接: 单词的子串
难度: 困难
题目:
题目描述
运行示例:

运行示例
思路:
哈希表+滑动窗口

代码:

class Solution {
public:
    vector<int> findSubstring(string s, vector<string>& words) {
        int slen = s.size();
        int wlen = words[0].size();
        int wnum = words.size();
        vector<int> ans;

        //建立哈希表
        unordered_map<string ,int> hh;
        for(int i=0;i<wnum; i++){
            hh[words[i]] = i+1;
        }
        //初始化答案数组
        vector<int> tt(wnum);
        for(int i=0;i<wnum;i++){
            tt[hh[words[i]]-1]++;
        }

        //分不同截取方式
        for(int i=0;i<wlen;i++){
            //记录不同单词数量
            vector<int> nn(wnum);
            //开头位置计算
            for(int j=i; j<wlen*wnum+i; j+=wlen){
                string st = s.substr(j,wlen);
                if(hh[st]){
                    nn[hh[st]-1]++;
                }
            }
            if(nn==tt) ans.push_back(i);
            //滑动窗口 
            for(int j=i; j<slen-wlen*wnum; j+=wlen){
                string sm = s.substr(j,wlen);
                string sp = s.substr(j+wlen*wnum, wlen);
                if(hh[sm]) nn[hh[sm]-1]--;
                if(hh[sp]) nn[hh[sp]-1]++;
                if(nn==tt) ans.push_back(j+wlen);
            }
        }
        return ans;

    }
};

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

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

相关文章

运费业务:

新增或修改&#xff1a; 第一步&#xff1a;查询是否有存在的模板&#xff0c;没有的话直接新增 第二步&#xff1a;模板不为空(存在经济区互寄情况)&#xff0c;判断经济区中的关联城市是否已经添加&#xff08;一条SQL数据中经济区中的关联城市可以选择多个,但其他经济区中也…

基于Kubernetes(K8s)构建企业容器云基础运行环境

cncfstack 新 文章上线&#xff1a; 书名&#xff1a;《云原生解决方案》 地址&#xff1a;https://zhaowenyu.com/cncf-solution 访问&#xff1a;文章底部“阅读原文”或访问域名 云原生计算是云计算发展新的里程碑阶段&#xff0c;是当今与未来很长一段时间中 IT 发展的技…

《从零开始制作消除游戏:基于Web技术的简单教程》

在撰写《从零开始制作消除游戏&#xff1a;基于Web技术的简单教程》这篇博客时&#xff0c;主要的目标是提供一个清晰、逐步的指南&#xff0c;帮助读者从零开始创建自己的消除游戏。 游戏逻辑实现 游戏板设计与初始化&#xff1a;描述如何创建游戏板的数据结构&#xff0c;以…

Linux/Luanne

Enumeration nmap 首先扫描目标端口对外开放情况&#xff0c;第一轮扫描发现对外开放了22,80,9001三个端口&#xff0c;端口详细信息如下 TCP/9001 9001端口挺神奇&#xff0c;nmap给出的结果是在9001端口运行着Medusa Supervisor&#xff0c;访问站点发现了一个登录框 在谷…

Google LUMIERE 一种用于生成逼真视频的时空扩散模型

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【unity实战】实现蓄力丢手榴弹、烟雾弹、燃烧弹的效果

文章目录 爆炸燃烧烟雾效果资产手榴弹丢手雷烟雾弹、燃烧弹实现手雷每次撞墙弹发出音效&#xff08;补充&#xff09;完结 爆炸燃烧烟雾效果资产 https://assetstore.unity.com/packages/vfx/particles/war-fx-5669 手榴弹 手榴弹配置好刚体&#xff0c;碰撞体 新增脚本Th…

金融OCR领域实习日志(二)——四种OCR模型效果测试(附图)

文章目录 四种模型ocr效果简单测试模型场景1.paddle框架下PP-OCRv31.1.效果如下&#xff1a;1.2.总结 2.paddle框架下ppocr_server_v22.1.效果如下2.2.总结 3.CnOCR3.1.效果如下3.2.总结 4.TesseractOCR4.1.效果如下4.2.总结 5.后续想法 四种模型ocr效果简单测试 模型 PP-OCR…

Optional lab: Linear Regression using Scikit-LearnⅠ

scikit-learn是一个开源的、可用于商业的机器学习工具包&#xff0c;此工具包包含本课程中需要使用的许多算法的实现 Goals In this lab you will utilize scikit-learn to implement linear regression using Gradient Descent Tools You will utilize functions from sci…

用大模型训练实体机器人,谷歌推出机器人代理模型

谷歌DeepMind的研究人员推出了一款&#xff0c;通过视觉语言模型进行场景理解&#xff0c;并使用大语言模型来发出指令控制实体机器人的模型——AutoRT AutoRT可有效地推理自主权和安全性&#xff0c;并扩大实体机器人学习的数据收集规模。在实验中&#xff0c;AutoRT指导超过…

架构篇25:高可用存储架构-双机架构

文章目录 主备复制主从复制双机切换主主复制小结存储高可用方案的本质都是通过将数据复制到多个存储设备,通过数据冗余的方式来实现高可用,其复杂性主要体现在如何应对复制延迟和中断导致的数据不一致问题。因此,对任何一个高可用存储方案,我们需要从以下几个方面去进行思考…

python:socket基础操作(4)-《tcp客户端基础》

tcp就和udp不一样了&#xff0c;tcp是客户端和服务器端&#xff0c;如果想通过tcp发送数据&#xff0c;要先让tcp进行连接服务器端 tcp客户端 先让服务器端进行启动 import socketdef main():# 创建套接字tcp_client_socket socket.socket(socket.AF_INET,socket.SOCK_STREAM…

flink1.13环境搭建

1、本地启动非集群模式 最简单的启动方式&#xff0c;其实是不搭建集群&#xff0c;直接本地启动。本地部署非常简单&#xff0c;直接解压安装包就可以使用&#xff0c;不用进行任何配置&#xff1b;一般用来做一些简单的测试。 具体安装步骤如下&#xff1a; 1.1 下载安装包…

【AIGC】Diffusers:训练扩散模型

前言 无条件图像生成是扩散模型的一种流行应用&#xff0c;它生成的图像看起来像用于训练的数据集中的图像。通常&#xff0c;通过在特定数据集上微调预训练模型来获得最佳结果。你可以在HUB找到很多这样的模型&#xff0c;但如果你找不到你喜欢的模型&#xff0c;你可以随时训…

【渗透测试】借助PDF进行XSS漏洞攻击

简介 在平时工作渗透测试一个系统时&#xff0c;常常会遇到文件上传功能点&#xff0c;其中大部分会有白名单或者黑名单机制&#xff0c;很难一句话木马上传成功&#xff0c;而PDF则是被忽略的一个点&#xff0c;可以让测试报告更丰富一些。 含有XSS的PDF制作步骤 1. 编辑器…

VUE引入DataV报错记录

DataV官网&#xff08;不支持Vue3&#xff09;&#xff1a;Welcome | DataV 一、按照官网引入后报错 【1】 Failed to resolve entry for package "dataview/datav-vue3". The package may have incorrect main/module/exports specified in its package.json. 将…

【第一天】蓝桥杯备战

题 1、 门牌号2、卡片3、分数 1、 门牌号 https://www.lanqiao.cn/problems/592/learning/ 解法一&#xff1a;暴力遍历 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner sca…

MyBatis中一级缓存是什么?SqlSession一级缓存失效的原因?如何理解一级缓存?

一级缓存是SqlSession级别的&#xff0c;通过同一个SqlSession查询的数据会被缓存&#xff0c;下次查询相同的数据&#xff0c;就 会从缓存中直接获取&#xff0c;不会从数据库重新访问 使一级缓存失效的四种情况&#xff1a; 1) 不同的SqlSession对应不同的一级缓存 2) 同一…

爬虫(一)

1. HTTP协议与WEB开发 1. 什么是请求头请求体&#xff0c;响应头响应体 2. URL地址包括什么 3. get请求和post请求到底是什么 4. Content-Type是什么1.1 简介 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写,是用于万维网&#xff08;…

带【科技感】的Echarts 图表

Echarts脚本在线地址 https://cdn.jsdelivr.net/npm/echarts5.4.3/dist/echarts.min.js 引入Echarts 脚本后粘贴代码 vue2 代码&#xff1a; <template><div><div ref"col-2-row-2" class"col-2-row-2"></div></div> <…

【RabbitMQ】死信(延迟队列)的使用

目录 一、介绍 1、什么是死信队列(延迟队列) 2、应用场景 3、死信队列(延迟队列)的使用 4、死信消息来源 二、案例实践 1、案例一 2、案例二&#xff08;消息接收确认 &#xff09; 3、总结 一、介绍 1、什么是死信队列(延迟队列) 死信&#xff0c;在官网中对应的单词…