力扣题目训练(1)

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;

    }
};

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

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

相关文章

C++入门【33-C++ 类 对象】

C 在 C 语言的基础上增加了面向对象编程&#xff0c;C 支持面向对象程序设计。类是 C 的核心特性&#xff0c;通常被称为用户定义的类型。 类用于指定对象的形式&#xff0c;是一种用户自定义的数据类型&#xff0c;它是一种封装了数据和函数的组合。类中的数据称为成员变量&a…

大模型竞速下半场,探索大模型应用的奥秘

8年前&#xff0c;我与朋友联合创立了对话式RPA开源框架Wechaty。如今&#xff0c;Wechaty已成为GitHub上Star最多的对话式RPA开源框架。 5年前&#xff0c;我为百度制作了《对话式AI》系列视频课程。至今&#xff0c;该课程仍在百度AI官网开放&#xff0c;帮助百万名对话式AI…

shell 脚本4

循环语句 echo命令 1.标准输出 2.用来调整脚本里面的格式 echo -e \b 删除b前面的数字 echo -e \t &#xff08;横向制表符 横向tab键&#xff09; echo -e \c 删除c后面的字符&#xff0c;并且不换行 echo -e \n 换行 自动硬盘分区 新建一块磁盘/dev/sdb 可以…

22款奔驰GLS450升级中规主机 激活九大功能

平行进口奔驰GLS450 语音小助手要说英语 十分的麻烦 而且也没有导航&#xff0c;原厂记录仪也减少了 很不方便 那要怎么解决呢 往下看&#xff0c;星骏汇小许Xjh15863 其实很简单&#xff0c;我们只需要更换一台中规的新主机就可以实现以下功能&#xff1a; ①中国地图 ②语…

计算机设计大赛 医学大数据分析 - 心血管疾病分析

文章目录 1 前言1 课题背景2 数据处理3 数据可视化4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据的心血管疾病分析 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9…

雷盛537威士忌:特别的味蕾与风格

雷盛537威士忌&#xff0c;一款源自英国苏格兰的好蒸馏酒&#xff0c;以其特别的味蕾和风格赢得了全球品鉴者的赞誉。这款威士忌在酿造过程中充分体现了苏格兰威士忌的传统工艺与精神&#xff0c;同时又融入了现代的创新元素&#xff0c;使其成为威士忌爱好者不容错过的佳品。 …

muduo网络库剖析——事件循环与线程EventLoopThread接口类

muduo网络库剖析——事件循环与线程EventLoopThread接口类 前情从muduo到my_muduo 概要bindunique_lock< mutex > 与 condition_variable 框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库&#xff0c;考虑的肯定是众多…

还在纠结怎么选随身WiFi的,看看这个!随身WiFi靠谱榜第一名推荐!哪个随身WiFi最好用

你是不是还在头疼如何挑选一个靠谱好用的随身WiFi呢&#xff1f;市场上的随身WiFi产品五花八门&#xff0c;每次购买随身WiFi都会被坑&#xff0c;差点就失去购买的信心了~别灰心&#xff0c;一篇文章教你如何挑选一个靠谱好用的随身WiFi&#xff01; 一、5大购买原则&#xff…

使用GtkSharp下载zip包过慢问题解决方案

背景 安装GtkSharp这个包准备使用C#进行跨平台窗体应用程序开发&#xff0c;运行时发现其需要从github上下载【https://github.com/GtkSharp/Dependencies/raw/master/gtk-3.24.24.zip】这个依赖包&#xff0c;不知道是被墙了还是咋的&#xff0c;下载超时导致运行失败。 解决…

【java面试】Spring

目录 1. Spring 介绍1.1 Spring 的优点1.2 Spring 的缺点1.3 详细讲解一下核心容器&#xff08;spring context应用上下文) 模块 2. Spring俩大核心概念IOC&#xff0c;Inversion of Control&#xff0c;控制反转AOP(Aspect-OrientedProgramming)&#xff0c;面向切面编程Sprin…

【第十六课】哈希表(acwing-841字符串哈希 / 详解 / 优秀的文章推荐 / c++代码)

目录 思想 代码如下 一些解释 1.基数P的选择 2.unsigned long long类型 可能需要看的文章博客 思想 咳咳&#xff0c;感觉这个刚开始第一遍接触的时候很抽象&#xff0c;&#xff0c;&#xff0c;还好网友们很强&#xff0c;有很通俗的解释办法hh。 字符串的哈希核心思…

3.7V升5V 12V 24V 30V 24V/5A升压恒压芯片-H6922

升压恒压芯片是一种电源管理集成电路&#xff0c;其主要功能是将输入电压提升到稳定的输出电压。以下是升压恒压芯片的一些优点&#xff1a; 稳定输出电压&#xff1a;升压恒压芯片能够确保输出电压维持在一个恒定的水平&#xff0c;不受输入电压波动的影响。这有助于提供稳定的…

《WebKit 技术内幕》学习之六(1): CSS解释器和样式布局

《WebKit 技术内幕》之六&#xff08;1&#xff09;&#xff1a;CSS解释器和样式布局 CSS解释器和规则匹配处于DOM树建立之后&#xff0c;RenderObject树之前&#xff0c;CSS解释器解释后的结果会保存起来&#xff0c;然后RenderObject树基于该结果来进行规范匹配和布局计算。当…

除了Docusaurus,还有哪些工具可以搭建知识库?(非开源的也可以)

在今天的数字化时代&#xff0c;为了更好地管理和共享企业内部的知识&#xff0c;许多公司都开始寻找适合自己的知识库搭建工具。Docusaurus是一个比较有知名度的开源知识库工具&#xff0c;但除了Docusaurus之外&#xff0c;还有其他非开源的工具同样可以搭建出高效的知识库。…

Wireshark中的ARP协议包分析

Wireshark可以跟踪网络协议的通讯过程&#xff0c;本节通过ARP协议&#xff0c;在了解Wireshark使用的基础上&#xff0c;重温ARP协议的通讯过程。 ARP&#xff08;Address Resolution Protocol&#xff09;地址解析协议&#xff0c;是根据IP地址获取物理地址的一个TCP/IP协议。…

Vue-38、Vue中插件使用

1、新建plugins.js文件 2、可以在plugins.js 定义全局过滤器 定义全局指令 定义混入 给vue原型上添加一个方法 export default {install(Vue){console.log("install",Vue);//全局过滤器Vue.filter(mySlice,function (value) {return value.slice(0,4)});//定义全局…

认识数学建模

文章目录 1 什么是数学建模2 数学建模的比赛形式3 参加数学建模的好处4 数学建模的流程5 数学建模成员分工6 数学建模常用软件7 数学建模竞赛7.1 美国大学生数学建模竞赛7.2 MathorCup高校数学建模挑战赛7.3 华中杯大学生数学建模挑战赛7.4 认证杯数学建模网络挑战赛7.5 华东杯…

让抖音引流到微信小程序的三方工具数灵通

抖音作为一款火爆的短视频社交平台&#xff0c;吸引了数亿用户的关注和喜爱。除了观看和制作视频外&#xff0c;抖音还提供了跳转到小程序的功能&#xff0c;让用户可以享受更多功能和乐趣。那么&#xff0c;如何在抖音中跳转到小程序呢&#xff1f;以下是详细解答&#xff1a;…

【类与对象】你真的知道Java中的类和对象吗?

前言 本篇文章主要是深入讲一讲类和对象&#xff0c;包括他们的关系&#xff0c;内存分配&#xff0c;如何使用等等。其实如果对类和对象有过了解的读者应该会看起来更加舒服&#xff0c;我接下来讲的只要理解就好了&#xff0c;不一定说要特意去背啊这种&#xff0c;你可以收…

P4769 [NOI2018] 冒泡排序 洛谷黑题题解附源码

[NOI2018] 冒泡排序 题目背景 请注意&#xff0c;题目中存在 n 0 n0 n0 的数据。 题目描述 最近&#xff0c;小 S 对冒泡排序产生了浓厚的兴趣。为了问题简单&#xff0c;小 S 只研究对 1 1 1 到 n n n 的排列的冒泡排序。 下面是对冒泡排序的算法描述。 输入&#x…