leetcode(41-45)

力扣K神图解算法数据结构解析06 六、排序 剑指40,最小的k个数 //时间O(n),空间O(logn),此方法比使用快排快,空间为快排平均复杂度 //此题不能使用快排,因为面试时基本不让让你使用快排 //此方法基于快排但又不是快排,准确的说是部分快排,只对感兴趣的部分快排 //因此时间复杂度相较于快排更低,其思想是当哨兵的序号等于k时,哨兵左边即为最小k个数 //需要注意几点 //1.终止条件与快排不一样 //2.两个while(i<j)等号不要忘记,一个是<=,一个是>= //3.对于递归,不全递归,只选择感兴趣的 阅读详情

41. 缺失的第一个正数

给定一个未排序的整数数组,找出其中没有出现的最小的正整数。

示例 1:

输入: [1,2,0]
输出: 3

示例 2:

输入: [3,4,-1,1]
输出: 2

示例 3:

输入: [7,8,9,11,12]
输出: 1

说明:

你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。

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

42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos贡献此图。

示例:

输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6
class Solution {
public:
    int trap(vector<int>& height) {
        int left=0,right=height.size()-1,lh=0,rh=0,res=0;
        while(left<right){
            if(height[left]<height[right]){
                if(height[left]<lh) res=res+lh-height[left];
                else lh=height[left];
                left++;
            } else {
                if(height[right]<rh) res=res+rh-height[right];
                else rh=height[right];
                right--;
            }
        }
        return res;
    }
};

43. 字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

说明:

  1. num1 和 num2 的长度小于110。
  2. num1 和 num2 只包含数字 0-9。
  3. num1 和 num2 均不以零开头,除非是数字 0 本身。
  4. 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
class Solution {
public:
    string multiply(string num1, string num2) {
        const int m=num1.size();
        const int n=num2.size();
        vector<int> a(m+n,0);
        
        for(int i=0; i<m; i++){
            int dig=0;
            for(int j=0; j<n; j++){
                a[i+j] += (num1[m-1-i]-'0')*(num2[n-1-j]-'0')+dig;
                dig=a[i+j]/10;
                a[i+j] %= 10;
            }
            if(dig) a[n+i] += dig;
        }
        while(a.size()>1 && a.back()==0) a.pop_back();
        string res;
        for(auto it=a.rbegin();it!=a.rend();it++) res += *it+'0';
        return res;
    }
};

44. 通配符匹配

给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。

'?' 可以匹配任何单个字符。
'*' 可以匹配任意字符串(包括空字符串)。

两个字符串完全匹配才算匹配成功。

说明:

  • s 可能为空,且只包含从 a-z 的小写字母。
  • p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。

示例 1:

输入:
s = "aa"
p = "a"
输出: false
解释: "a" 无法匹配 "aa" 整个字符串。

示例 2:

输入:
s = "aa"
p = "*"
输出: true
解释: '*' 可以匹配任意字符串。

示例 3:

输入:
s = "cb"
p = "?a"
输出: false
解释: '?' 可以匹配 'c', 但第二个 'a' 无法匹配 'b'。

示例 4:

输入:
s = "adceb"
p = "*a*b"
输出: true
解释: 第一个 '*' 可以匹配空字符串, 第二个 '*' 可以匹配字符串 "dce".

示例 5:

输入:
s = "acdcb"
p = "a*c?b"
输入: false
class Solution {
public:
    bool isMatch(string s, string p) {
        int m=s.size(),n=p.size();
        vector<vector<int>> dp(m+1,vector<int>(n+1,0));
        dp[0][0]=1;
        for(int j=1; j<=n; j++) {
            if(p[j-1]=='*') dp[0][j]=dp[0][j-1];
        }
        for(int i=1; i<=m; i++){
            for(int j=1; j<=n; j++){
                if(p[j-1] != '*'){
                    if(p[j-1]==s[i-1] || p[j-1]=='?'){
                        dp[i][j]=dp[i-1][j-1];
                    }
                } else {
                        dp[i][j]=dp[i-1][j] || dp[i][j-1] || dp[i-1][j-1];
                    }
            }
        }
        return dp[m][n];
    }
};class Solution {
public:
    bool isMatch(string s, string p) {
        int m=s.size(),n=p.size();
        vector<vector<int>> dp(m+1,vector<int>(n+1,0));
        dp[0][0]=1;
        for(int j=1; j<=n; j++) {
            if(p[j-1]=='*') dp[0][j]=dp[0][j-1];
        }
        for(int i=1; i<=m; i++){
            for(int j=1; j<=n; j++){
                if(p[j-1] != '*'){
                    if(p[j-1]==s[i-1] || p[j-1]=='?'){
                        dp[i][j]=dp[i-1][j-1];
                    }
                } else {
                        dp[i][j]=dp[i-1][j] || dp[i][j-1] || dp[i-1][j-1];
                    }
            }
        }
        return dp[m][n];
    }
};

45. 跳跃游戏 II

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
     从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

说明:

假设你总是可以到达数组的最后一个位置。

class Solution {
public:
    int jump(vector<int>& nums) {
        if(nums.size() <= 1) return 0;
        int index,max=0,step=0,i=0;
        while(i<nums.size()){
            if(i+nums[i] >= nums.size()-1){
                step++;
                break;
            }
            max=0;
            index=i+1;
            for(int j=i+1; j-i<=nums[i]; j++){
                if(max<nums[j]+j-i){
                    max=nums[j]+j-i;
                    index=j;
                }
            }
            i=index;
            step++;
        }
        return step;
    }
};

(以上题目均摘自leetcode)

Leetcode刷题-(41~45)-Java 算法是码农的基本功,也是各个大厂必考察的重点,让我们一起坚持写题吧。遇事不决,可问春风,春风不语,即是本心。我们在我们能力范围内,做好我们该做的事,然后相信一切都事最好的安排就可以啦,慢慢来,会很快,向前走,别回头。 阅读详情

相关推荐

LeetCode刷题模版:41 - 50

Hello!ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序猿|C++选手|学生简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!唯有努力💪本文仅记录自己感兴趣的内容文章仅作为个人学习笔记记录,记录从0到1的一个过程希望对您有一点点帮助,如有错误欢迎小伙伴指正。

海到无边天作岸 山登绝顶我为峰 1012

【PythonCode】力扣Leetcode41~45题Python版

力扣40-45

weixin_43790276的博客 1322

LeetCode+ 41 - 45 计数排序|单调栈|字符串、模拟|动态规划|双指针、贪心、动态规划

算法标签:数组、哈希表给出一个无序数组,要在里面找到最小的没有出现过的正整数,可以先排序,排序之后从前往后扫描,扫描到第一个没有出现过的整数就可以了,排序的时间复杂度是 O( nlogn )c++ 的指令只能执行 10^8 次先把所有的数放到哈希表里面,放完之后,再从小到大枚举每一个正整数,知道找到第一个没有出现过的正整数为止,这个就是答案首先,我们先把所有的数放到哈希表里面,这一步的时间复杂度为 O( n ),第二步枚举最多从 1 开始枚举到 n + 1,枚举到n + 1 的时候,表示已经枚举了 n +

weixin_60569662的博客 318

LeetCode 41~45

前言 本文隶属于专栏《LeetCode 刷题汇总》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构请见LeetCode 刷题汇总 正文 幕布 幕布链接 41. 缺失的第一个正数 题解 官方题解 3 次遍历,小于0都取大,所有取绝对值,小值取反,返回第一个大于0 class Solution { public int firstMissingPositive(int[] nums) { int n = nums.length;

Shockang的博客 5922

ESP32 开发实战:VS Code 头文件波浪线及编译错误的终极解决方案

本文针对ESP32开发者在VS Code中常见的头文件红色波浪线和fatal error编译错误,提供了终极解决方案。通过详细讲解如何配置c_cpp_properties.json文件来修复编辑器智能提示,以及如何修改CMakeLists.txt来修正编译器路径,帮助开发者彻底解决环境配置问题,提升开发效率。

prometheus9mon的博客 294

React 源码解析 | Reconcile协调过程

上篇讲了React的工作流程,这篇详细的讲一下render过程中的beginWork函数,也就是深度优先创建Fiber树中"递"的过程。beginWork函数传入当前已经创建好的Fiber节点,返回创建/复用的第一个子FIber节点,也就是wip.child在renderRoot中,在开始创建整棵FIber树之前,会先调用prepareRefreshStack创建/复用一个新的HostRootFiber。

weixin_40710412的博客 1220

【LeetCode Solutions】LeetCode 41 ~ 45 题解

【LeetCode Solutions】LeetCode 41 ~ 45 题解

一只快乐的小蒟蒻~ 667

Hyper-V集群部署指南

工欲善其事,必先利其器。搭建一个方便管理的服务集群,是分布式学习很重要的环境。 目前流行的虚拟机产品主要为Vmware 和 win10自带的Hyper-V(win10家庭版无此功能),网上关于Vmware的教程更多,显然它更容易上手,但Hyper-V也算是一个很不错的产品,这里记录一下我的学习过程: 目录 Hyper-V的安装 服务集群的搭建 虚拟机的网络通信 NAT网络的搭建 端口映射 Linux的静态IP 虚拟机的自启动问题 Hyper-V的安装 也不能算说是安装,如果你的win1

Swing 6919

【JavaScript】LeetCode:41-45

【代码】【JavaScript】LeetCode:41-45。

weixin_45980065的博客 1400

大白话讲解Numpy中什么是一维、二维、三维数组,以及5种创建方式

NumPy中提供了多种创建数组的方式,其中最基本的方式就是通过array()函数创建数组在使用该函数时直接传入列表或元组即可。 通过array()函数分别创建一维数组、二维组和三维数组,那么什么是维度呢?一维、二维、三维有什么区别? 1、什么是维度? 维度可以理解为描述数据的一种 “方向” 或者 “层次”。在数组中,维度的数量决定了我们需要用多少个索引来访问一个元素 2、一维、二维、三维的区别? (1)一维:一维数组就像是一条直线上排列的一组数据,例如: a = np.array([1, 2

1365

手把手教你用Ubuntu Desktop搭建个人L2TP服务器,手机电脑都能连(Network Manager配置详解)

本文详细介绍了在Ubuntu Desktop上使用Network Manager图形化配置L2TP服务器的方法,实现手机、电脑等多设备安全连接。从环境准备、图形界面设置到各平台客户端配置,提供一站式解决方案,并包含常见问题排查与安全增强措施,帮助用户快速搭建个人远程访问网络。

weixin_30555125的博客 119

【LeetCode高频SQL50题-基础版】打卡第8天:第41~45题

在这个博客专栏中,我将为大家提供关于 LeetCode 高频 SQL 题目的基础版解析。LeetCode 是一个非常受欢迎的编程练习平台,其中的 SQL 题目涵盖了各种常见的数据库操作和查询任务。对于计算机科班出身的同学来说,SQL 是一个基础而又重要的技能。不仅在面试过程中经常会遇到 SQL 相关的考题,而且在日常的开发工作中,掌握 SQL 的能力也是必备的。本专栏的目的是帮助读者掌握 LeetCode 上的高频 SQL 题目,并提供对每个题目的解析和解决方案。

热爱编程、热爱生活、热爱探索 855

损失函数大汇总(六十一)(Signed Distance Map Loss附公式推导与代码)

摘要 本文介绍了Signed Distance Map (SDM) Loss,一种将形状先验直接融入分割任务的方法。SDM将每个像素表示为到目标边界的带符号距离(内部为负,外部为正),相比二值mask能更连续地表达形状几何信息。SDM Loss的核心思想是让网络学习这个隐式形状场,通过可微的Heaviside函数近似将SDM转换为分割结果。文中重点分析了一种product-based regression loss,它能同时关注距离数值和内外符号的正确性,对边界区域尤为敏感。SDM Loss通常与传统的分割

悦学共鸣,温柔以待,汇聚光芒,共同成长 188

leetCode 41-45

leetcode98-验证二叉搜索树 98-验证二叉搜索树

fan__lee的博客 364

PICO640红外探测器配置模块verilog

Ulis pico 640红外探测器配置模块

Go Forward Forever! 2032

Unity3D实现项目限制功能(使用次数限制和时间限制)

大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。在软件开发的时候,可能会遇到程序的使用次数限制,以及时间的限制,下面就写一下这两种方法是新建注册表,增加键值对,修改键值,完成对程序的控制提示:以下是本篇文章正文内容,下面案例可供参考以上就是讲了两种限制方法不定时更新Unity开发技巧,觉得有用记得一键三连哦。

心疼你的一切博客 1811

LeetCode 实践练习41-45

LeetCode–41(缺失的第一个正数) 方法:由于限制O(n)O(n)O(n)的时间复杂度,O(1)O(1)O(1)的空间复杂度.不能建立新的数组,那么只能覆盖原有数组,我们的思路是把1放在数组第一个位置nums[0],2放在第二个位置nums[1],即需要把nums[i]放在nums[nums[i] - 1]上,那么我们遍历整个数组,如果nums[i] != i + 1, 而nums[i]...

qq_40104034的博客 220

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

力扣爆刷第111天之CodeTop100五连刷41-45

这个是我简单画的一个图,可以理解为一个折线图,要寻找下一个排列,我们只需要从右边开始往左找,找到第一个小于自己的值,这个值需要由右侧第一个大于他的值进行交换,然后右侧是降序的,只需要翻转即可正序。思路:类似于归并排序,但我们只需要归并到一半即可,然后控制条件在一个while内完成两个数组的遍历,避免i<len1 && j < len2的情况,这样需要遍历多次,外加多次判断。思路:用两个栈来模拟队列,分别为s1和s2,入队只往s1加,出队,s2不空,s2出,s2空了把s1的全部出栈然后再压入s2中,再出队。

qq_43511039的博客 384

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

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

力扣爆刷第91天之hot100五连刷41-45

题目链接:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/?题目链接:https://leetcode.cn/problems/kth-smallest-element-in-a-bst/description/?题目链接:https://leetcode.cn/problems/binary-tree-right-side-view/description/?

qq_43511039的博客 544

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

LeetCode 算法系列:第 41 ~ 45题

目录 缺失的第一个正数 接雨水 字符串相乘 通配符匹配 跳跃游戏 II 41. 缺失的第一个正数 给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [7,8,9,11,12] 输出: 1 思路: 将所有的数用map存起来,然后从1依次开始找没有出现在map中的最小的正整数 ...

逍遥云的博客 328

每日5题Day9 - LeetCode 41 - 45

今天这道题没有ac,写不动了,下次再通过吧,先给个半成品下次回来改掉。本题借用:【宫水三叶】的思路来解决的。

alimamaalala的博客 355

leetcode题解python版:41-45

41、 缺失的第一个正数 给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。 解:先排序,然后从第一个大于零的数nums[i]开始往前走,如果它大于1,就返回一,否则不断+1,如果后面的数是前面的+1或+0,继续,否则输出前面的数+1即可。 class Solution: def firstMissingPositive(self, nums: List[int]) -> int: if not nums: return 1

baidu_41689104的博客 316

Python小白 Leetcode刷题历程 No.41-No.45 缺失的第一个正数、接雨水、字符串相乘、通配符匹配、跳跃游戏Ⅱ (有题干 有代码 有思路)

Python小白 Leetcode刷题历程 No.41-No.45 缺失的第一个正数、接雨水、字符串相乘、通配符匹配、跳跃游戏Ⅱ 写在前面: 作为一个计算机院的大学生,总觉得仅仅在学校粗略的学习计算机专业课是不够的,尤其是假期大量的空档期,作为一个小白,实习也莫得路子,又不想白白耗费时间。于是选择了Leetcode这个平台来刷题库。编程我只学过基础的C语言,现在在自学Python,所以...

LanXiu_的博客 744

面试笔试杂项积累-leetcode 41-45

41.41-First Missing Positive-Difficulty: Hard Given an unsorted integer array, find the first missing positive integer. For example, Given [1,2,0] return 3, and [3,4,-1,1] return 2. Your algorithm should run in O(n) time and uses constant space. 思路 给一个

wolf96的专栏 713

LeetCode究极班系列(41-45)

41. 缺失的第一个正数 给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。 输入: [1,2,0] 输出: 3 提示: 你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。 算法描述 将所有的数 存入set去重 然后从1开始枚举所有正整数 不存在就输出 哈希 class Solution { public: int firstMissingPositive(vector<int>& nums) { unordered_set

可乐大牛的博客 324

力扣爆刷第155天之TOP100五连刷41-45(下一个排列、正序数组中位数、归并排序链表)

思路:求下一个排列,本意就是字典序,举个例子,如果1、6、5、4、3、2的下个排列就是2、1、3、4、5、6,如果是3、2、1那么下一个排序是1、2、3,这类题目要结合图像来做,所以可以看的出来,要找的是一个转折点,从右向左寻找第一个凸起点,然后把凸起点右边的第一个大于凸起点左边的值进行交换,然后把凸起点开始到结尾的元素都翻转即可。题目链接:https://leetcode.cn/problems/median-of-two-sorted-arrays/description/从下面这个图好好体会。

qq_43511039的博客 440
上一篇: leetcode(36-40)
下一篇: leetcode(46-50)
小小螺丝刀
博客等级 码龄10年 41粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值