2020/12/16 leetcode刷题

【LeetCode攻略】使用LeetCode刷题时你必须注意的几个点 LeetCode刷题攻略:详细介绍LeetCode刷题时的各种常用技巧和注意点 阅读详情

738.单调递增的数字

在这里插入图片描述
解题思路:

利用贪心算法:此题从后向前遍历;一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),利用flag标记该位置,strNum[i - 1]–,然后从flag到len ;strNum[i]赋值为9;注意设置flag参数标记第一个大于str[i]的位置,一定要从strnum.length()开始;

代码实现

class Solution {
public:
    int monotoneIncreasingDigits(int N) {
    //to_string 将数字转换为字符串
        string strNum=to_string(N);
        //记录第一个大于str[i] 的位置;flag
        int flag=strNum.size();
        for(int i=strNum.size()-1;i>=0;i--){
            if(strNum[i-1]>strNum[i]){
                flag=i;
                strNum[i-1]--;
            }
        }
        for(int i=flag;i<strNum.size();i++){
            strNum[i]='9';
        }
        //stoi将字符串转换为整型变量;
        return stoi(strNum);
    }
};

20 有效的括号

在这里插入图片描述
解题思路:

利用辅助栈,当碰到左括号时入栈,右括号时比较与栈顶元素,相匹配则出栈,不匹配return false;

class Solution {
public:
    bool isValid(string s) {
        if(s.size()==0) return true;
        stack<char>sta;
        for(int i=0 ; i<s.length() ; i++){
            if(s[i]=='('||s[i]=='{'||s[i]=='['){
                sta.push(s[i]);
            }else{
                if(s[i]==')'){
                    if(!sta.empty()&&sta.top()=='('){
                        sta.pop();
                    }else{
                        return false;
                    }
                  
                }else if(s[i]==']'){
                   if(!sta.empty()&&sta.top()=='['){
                        sta.pop();
                    }else{
                        return false;
                    }
                  
                }else if(s[i]=='}'){
                    if(!sta.empty()&&sta.top()=='{'){
                            sta.pop();
                    }else{
                        return false;
                    }
                }
            }
        }
        if(sta.empty()){
            return true;
        }
        return false;

    }
};

精简版本:

在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了,比左括号先入栈代码实现要简单的多了!

在这里插入图片描述

class Solution {
public:
    bool isValid(string s) {
        stack<int> st;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == '(') st.push(')');
            else if (s[i] == '{') st.push('}');
            else if (s[i] == '[') st.push(']');
            // 第三种情况 是遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号 return false
            // 第二种情况 遍历字符串匹配的过程中,发现栈里没有我们要匹配的字符。所以return false
            else if (st.empty() || st.top() != s[i]) return false;
            else st.pop(); // st.top() == s[i]
        }
        // 第一种情况 此时我们已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false,否则就return true
        return st.empty();
    }
};


19 删除链表的倒数第N个节点

leetcode19
在这里插入图片描述
解题思路

解法1:可以先遍历一遍求出链表的长度N,然后等价于求删除正数第N-n+1的节点,在来一遍遍历,删除节点即可;

解法2:设置双指针,快指针先走K步,然后和慢指针一起向后走,当快指针为空即走到链表末尾时,此时慢指针正好对应与待删除结点的位置上,而如果在链表的头部加上虚拟头节点,此时则对应待删除结点的前一个位置,将此节点指向next的next即可,即slow->next=slow->next->next;。

代码实现


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
//解法1:
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        int cnt=0;
        if(head==nullptr) return nullptr;
        ListNode *cur=head;
        ListNode *dummpy=new ListNode(0);
        dummpy->next=head;
        while(cur){
            cnt++;
            cur=cur->next;
        }
        cnt-=n;
        ListNode *tmp=dummpy;
        while(cnt--){
            tmp=tmp->next;
        }
        tmp->next=tmp->next->next;
        return dummpy->next;
    }
};
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
 //解法二
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        if(head==nullptr||head->next==nullptr) return nullptr;
        ListNode *fast=head;
        //添加亚节点在链表头节点之前,防止越界的同时找到待删除节点的前一个位置。
        ListNode *dummpy=new ListNode (0,head);
        ListNode *slow=dummpy;

        while(n--){
           fast=fast->next;
        }
        while(fast!=nullptr){
            slow=slow->next;
            fast=fast->next;
        }
		slow->next=slow->next->next;
		
        return dummpy->next;
        
    }
};

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode *slow=head,*fast=head,*pre=head;
        while(n--){
            fast=fast->next;
        }
        while(fast){
            pre=slow;
            slow=slow->next;
            fast=fast->next;
        }
        //重要,边界判断
        if(slow==head) return head->next;
        pre->next=slow->next;
        return head;

    }
};
课设报告-超市收银系统 javaweb(附源代码) 超市收银系统由收银员输入顾客的会员卡卡号(若有卡),所购买的货号。从数据库中取出有关价格信息,在把这些信息返回给收银台,同时把收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库存储以供查询。另外,对没有卡的消费不记录该顾客的消费情况扥个人信息,如果一个未持卡顾客一次购买满200元,可围棋发放一张会员卡,以后在该商场购物可享受9折优惠。 阅读详情

相关推荐

Abaqus子程序开发避坑指南:从UMESHMOTION到齿轮磨损分析实战

本文深入探讨Abaqus子程序开发中的关键技术与避坑指南,重点解析UMESHMOTION在齿轮磨损分析中的实战应用。从开发环境搭建、调试框架构建到性能优化和大规模计算,提供系统化的解决方案。通过真实案例展示如何避免内存泄漏、网格畸变等常见问题,并介绍数据驱动的磨损预测等前沿技术,帮助工程师提升仿真精度与效率。

weixin_30892037的博客 87

2020_12_21 LeetCode刷题

今日刷题六道,六道题目都是树类型的题目,最后一到题目在15min内实现过程中出现了一些差错,其他的题目都是在15min内完成。要准备考试了,只能在复习间隙休息的时间刷题放松,争取在考试前能够补完简单难度的题目。 501. 二叉搜索树中的众数 递归回溯题。没有达成最优解,使用了额外的空间,递归统计各个数,同时记录得出最多的次数,之后直接遍历哈希表将出现次数最多的数存放即可。 /** * Definition for a binary tree node. * struct TreeNode { *

Ls_attack的博客 161

BugkuCTF-PWN题pwn2-overflow超详细讲解

解题思路 1)计算出get_shell_的地址偏移量 2)算出来之后就直接溢出到后门函数 知识点 x64函数调用规则 解题之前我们先学下linux x64的函数调用规则。 x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, int g, int h),首先他会把前6个参数从左往右存入到寄存器rdi、rsi、rdx、rcx、r8、r9,其余参数存入到栈里,保存的顺序是从右往左入栈。比如abcdef会存入到寄存器里,然后一次入栈h

am_03的博客 3013

关于leetcode刷题详细介绍

  虽然刷题一直饱受诟病,不过不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会。现在提供在线编程评测的平台有很多,比较有名的有 hihocoder,LintCode,以及这里我们关注的 LeetCode。 LeetCode收录了许多互联网公司的算法题目,被称为刷题神器,我虽然早有耳闻,不过却一直没有上面玩过。   据了解,LeetCode 是一个非常棒的 OJ(Online J...

智者之家 9万+

深入解析STM32官方库:.c/.h文件功能与应用场景

本文深入解析了STM32官方库中.c和.h文件的核心功能与应用场景。详细剖析了stm32f10x.h、启动文件、外设驱动文件等关键组件的作用,并通过LED闪烁实战演示了如何构建工程、配置文件和调用库函数。文章旨在帮助开发者理解官方库的架构,掌握高效使用技巧,从而降低STM32开发门槛,提升开发效率与代码质量。

weixin_29189377的博客 347

《无人驾驶车辆模型预测控制》(第二版)第四章详细学习——算法部分

根据代码进行的“MPC跟踪直线和圆算法”的详细推导学习记录。

Fengdf666的博客 5015

力扣刷题之准备工作

在刷算法题的过程中进行总结是非常重要的,它可以帮助你梳理思路、加深理解、记录学习成果,并提升解题能力。每天回顾:在每天结束时,对当天解决的题目进行回顾。检查解决方案的正确性,并思考是否有更优化的方法。记录下遇到的难点和解决方法,以及学到的新知识点和技巧。整理这些笔记并归档到适当的分类中,以便今后参考。每周汇总:在每周末或开始新一周时进行总结。复习过去一周解决的题目,分析解题过程中使用的算法和数据结构。总结你学到的关键知识点、解题技巧和模式,并将其整理到博客中。

weixin_47040031的博客 9752

Vue3多级路由缓存失效的深度解析与实战解决方案

本文深度解析了Vue3项目中多级路由下keep-alive缓存失效的根本原因,并提供了三种实战解决方案:通过路由扁平化根治问题、利用状态管理精细模拟缓存效果,以及借助keep-alive-vue3插件快速修复。文章旨在帮助开发者彻底理解Vue Router与keep-alive的协作机制,从而根据项目情况选择最佳策略,有效解决页面状态丢失的难题。

weixin_29015801的博客 285

【python力扣刷题经验分享】——从初入力扣到上分变强!!!

在力扣的异世界里不断升级!

2301_80269840的博客 6408

组态王|通过日历控件选择时间段查询历史报警

哈喽,你好啊,我是雷工!这节记录下查询历史报警信息的功能实现。以下为实现笔记。

做有价值的事,积累有价值的笔记! 3758

Simulink智能驾驶场景探索:自动泊车系统设计与验证

自动泊车系统(APS)传感器模块:用于检测车辆周围的障碍物和其他车辆的位置。路径规划模块:根据传感器数据生成最优的泊车路径。控制器模块:根据路径规划结果生成转向角、速度等控制信号。执行器模块:根据控制器生成的信号调整车辆的方向盘、油门和刹车。在本实例中,我们将使用超声波传感器和摄像头来检测车辆周围的环境,并使用PID控制器实现自动泊车功能。通过本教程,我们介绍了如何使用 Simulink 进行自动泊车系统的仿真。背景介绍:理解自动泊车系统及其在智能驾驶中的应用。所需工具和环境。

MHD0815的博客 505

LeetCode刷题指南(一)

以下是我个人做题过程中的一些体会: 1. LeetCode的题库越来越大,截止到目前,已经有321个问题了。对于大多数人来说,没有时间也没有必要把所有题目都做一遍(时间充裕可以随意)。刷个100题左右应该就差不多了(可以考虑序号为前100多的题目,相对更经典一点)。 2. 从AC率高的开始做,难度从简单->中等,先不要做困难的。 3. 可以按照下文的面试出题频率顺序来做,从频率最高的一批开始。

Lnho的专栏 11万+

基于STM32的嵌入式平台实现EtherCAT主站

本文将介绍如何在基于STM32的嵌入式平台上构建EtherCAT主站,并提供相应的源代码。使用SOEM库提供的API函数,我们可以实现与EtherCAT从站设备的实时通信和数据交换。在STM32的代码中,使用SOEM库提供的API函数初始化EtherCAT主站。在SOEM库中,我们可以找到EtherCAT主站的实现代码和相关的API函数。使用SOEM库提供的API函数实现EtherCAT主站的功能,包括发送和接收EtherCAT数据帧、处理从站设备的状态等。确保连接正常并且设备能够相互通信。

CodeSageX的博客 2832

你有多久没有坚持过一件事情了?如果没有就来刷一轮力扣LeetCode

选择一样你想做的事情,坚持21天。如果没有想好,那就先来刷一轮力扣吧!~

车手只需要车和手,压力来自轮胎 1360

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

力扣刷题手册

前言: 随缘刷题,认真记录 文章目录字符串相加K次操作转字符串找出数组游戏的赢家粉刷天花板整理字符串 字符串相加 8/3力扣415字符串相加. 用字符串的方法来模拟加法过程,使用双指针从尾部开始遍历,逐个相加: 需要解决的问题: 进位。 两数长短不一致。 解决方案: 进位问题: 用一个变量记录每次相加中有没有进位,如果进位了该位置1,将加到下一个两两相加的结果中。 两数长度不一样: 有一个数已经到达数组头部时(已经加完了) 将其设为0,依然相加。 class Solution { pub.

zzzlueng的博客 1839

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

大一就开始这样刷题后,我成了同学们眼中的 offer 收割机

优快云 的小伙伴们,大家好,我是五一也没有闲着的二哥。 之前不是给大家分享了一份 Java 版的 LeetCode 刷题笔记嘛,很多小伙伴留言说刚好需要,对我这种大公无私的分享精神表示敬佩(嘘。 但由于时间比较紧张,PDF 版里只包含了前 50 道,所以我感觉还欠大家 250 道。所以趁着这个假期,靠着惊人的毅力,我又整理了 50 道 Java 版,从 51 道到 100 道。整理完的那一刻,真的是对天长啸, 捶胸顿足,终于舒了一口气,终于松了一口气。可怜我的右手食指,因为点击鼠标左键过于频繁,似乎有点隐

沉默王二 2万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Leetcode 300题AC的刷题总结(C与C++)

文章目录前引闲聊力扣刷题心路历程Day1 全部看题解 看思路Day2 - Day7 基本上看题解 怀疑自己是弱智Day8 - Day15 诶~有些题自己可以做出来了Day16 - Day24 开始进入正轨 开始总结方法Day24 - Day24 动态规划学习开始折磨DAY 25 - Day40 摸索探索 每天黑人问号脸Day40 - Day66 逐渐开始好起来了 出现转折点Day 67 - Day 80 中间毅然决然打算学C++ 学成C++开始刷题Day 81 - Day 94 300AC达成300AC达

Love 6's Private Blog 1856

LeetCode解题汇总目录

此篇为学习完《数据结构与算法之美》后,在LeetCode刷题的汇总目录,方便大家查找(Ctrl+Find),一起刷题,一起PK交流!如果本文对你有帮助,可以给我点赞加油! Updated on 2022.6.12刷题可以按照不同的专题进行,便于加强某个知识点的理解。另有《剑指Offer》面试题(更新完毕)、《程序员面试金典》面试题(更新完毕)、LintCode代码能力测试CAT。LeetCode MySQL 数据库解题目录点击访问 我的 LeetCode 主页我的 GitHub 主页注:本文超过字数限制,

Michael是个半路程序员 8万+

力扣热题100(附刷题表版)

不仅方便查看题目,并且,在完成题目后,,我放在了结尾,大家自取,直接复制粘贴到。2. 字母异位词分组(中等)3. 最长连续序列(中等)1. 两数之和 (简单)时做记录,整理了下面。

2301_79966297的博客 2231

LeetCode刷题汇总

剑指offer 剑指 Offer 03 数组中重复的数字 剑指 Offer 04 二维数组中的查找 剑指 Offer 05 替换空格 剑指 Offer 06 从尾到头打印链表 剑指 Offer 07 重建二叉树 剑指 Offer 09 用两个栈实现队列 剑指 Offer 10- I 斐波那契数列 剑指 Offer 10- II 青蛙跳台阶问题 剑指 Offer 11 旋转数组的最小数字 剑指 Offer 12 矩阵中的路径 剑指 Offer 13 机器人的运动范围 剑指 Offer 14- I 剪绳子 剑指

weixin_44171872的博客 2万+

【PythonCode】力扣Leetcode16~20题Python版

Leetcode16-20

weixin_43790276的博客 1648

为了通过面试,要刷多少道leetcode题?一文解答你的疑惑。

想要学习算法、应付笔试或者应付面试手撕算法题,相信大部分人都会去刷 Leetcode,有读者问?如果我在 leetcode 坚持刷它个 500 道题,以后笔试/面试稳吗? 这里我说下我的个人看法,我认为不稳。下面说说为啥不稳以及算法题应该如何刷、如何学才比较好,当然,也会推荐自己学过的资料。 一、先说说笔试题 在刷 leetcode 的时候,你会发现,每道题的题意都很短,你只需要花十几秒的时间,就知道这道题是要你干嘛了,并且每道题所用道的算法思想都很明确,动态规划、递归、二分查找等,你可能很快就知道该用哪种

Viper的程序员修炼手册 9891

LeetCode刷题笔记整理Python

文章目录前言一、数组1. 两数之和2. 寻找两个正序数组的中位数3. 盛最多水的容器4. 三数之和5. 打家劫舍系列打家劫舍Ⅰ打家劫舍Ⅱ打家劫舍Ⅲ6. 最大矩形和正方形最大矩形最大正方形7. 接雨水8. 不同路径9. 爬楼梯10. 和为K的子数组11. 合并两个有序数组12. 合并区间13. 最短无序连续子数组14. 最小路径15. 岛屿数量16. 任务调度器17. 每日温度18. 前 K 个高频元素19. 组合总和系列组合总和组合总和 II20. 全排列问题全排列的下一个排列写出所有的全排列 I写出所有

weixin_45517168的博客 2346

如何使用leetcode刷题

如何使用leetcode刷题 依据频率推荐的题目 以下内容节选自https://blog.youkuaiyun.com/lnho2015/article/details/50962989: 1. LeetCode的题库越来越大,没有时间也没有必要把所有题目都做一遍。刷个100题左右应该就差不多了(可以考虑序号为前100多的题目,相对更经典一点)。 2. 从AC率高的开始做,难度从简单-&amp;gt;...

frankmarvelous的博客 6893

力扣(LeetCode)刷题,简单题(第23期)

力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。

不脱发的程序猿 6933

【算法提升—力扣每日一刷】五日总结【12/13--12/17】

算法提升,力扣每日一刷

guojiaqi_的博客 1234
上一篇: 二叉树的遍历递归与迭代实现
下一篇: 数据库MySQL学习
helloppc90
博客等级 码龄9年 99粉丝 63原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值