LeetCode刷题顺序(新手入门)

这篇具有很好参考价值的文章主要介绍了LeetCode刷题顺序(新手入门)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本刷题策略为leetcode官方的新手村策略,跟着主页官方的新手村策略刷题,按照每天刷三简单题或两中等题或一难题的速度刷题,每天预计花费1.5h

下面的顺序是探索卡中的顺序

数组

分为三部分

1.做好初始定义 2.运用基础算法思想 3.双索引技巧-对撞指针 4.双索引技巧-滑动窗口

1.做好初始定义

移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

解法

难点就是不复制原数组要原地修改,解法为设置一个res,记录前面的0的个数,每次插入时只要插入到nums[i - res]中即可

移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

解法

和移动零一样,只不过换成了判断是否等于val

删除有序数组中的重复项

给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。

解法

利用双指针,j用来存储应该插入的下标,i用来遍历

删除有序数组中的重复项II

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

解法

int slow = 2, fast = 2;
        while(fast < n)
        {
            if(nums[slow - 2] != nums[fast]) nums[slow ++] = nums[fast];
            fast ++;
        }

2.运用基础算法思想 

颜色分类

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

必须在不使用库的sort函数的情况下解决这个问题。且仅使用常数空间

解法

指针p0,指向0应该插入的末尾,指针p1指向1应该插入的末尾。剩下的都是2,但是需要注意的是,在插入0的时候,1的指针要做相应的改变

        for(int i = 0; i < n; i ++)
        {
            if(nums[i] == 1) swap(nums[i], nums[p1 ++]);
            else if(nums[i] == 0)
            {
                swap(nums[i], nums[p0]);
                if(p0 < p1)//如果p0小于p1,则此时nums[i] = 1 nums[p0] = 0,
                //因为1的区间为p0 到p1,此时1区间的一个开头被吃掉了,要补上去
                {
                    swap(nums[p1], nums[i]);
                }
                p0 ++, p1 ++;
            }
        }

数组中第K个最大的数

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

解法

利用快速排序的变种求,模板题

合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

解法

难点在于利用常数个存储空间,我们采用从尾开始遍历的方式,插入到nums1的尾部,此时不存在冲突问题。

3.双索引技巧-对撞指针

两数之和 II - 输入有序数组

给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列  ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。

解法

双指针,一个指向头,一个指向尾,往中间遍历。这题居然是中等题。。。。。。

验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。

解法

难点就是要先移除所有的非字母数字

这里使用了isalnum()函数,判断是否为数字或字符,tolower()函数把字符串转换成小写,存储在sgood中

if(isalnum(ch)) sgood += tolower(ch);

反转字符串中的元音字母

给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。

元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现。

解法

难点是存储元音字母进行判断,之前采用了set方式但是很不方便,还是字符串最快

string yuan = "aeiouAEIOU";

 bool isVolwer(char a, string yuan)//判断是否是元音
    {
        int n = yuan.size();
        for(int i = 0; i < n; i ++)
            if(a == yuan[i]) return true;
        return false;
    }

盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

LeetCode刷题顺序(新手入门)

 解法

左右指针,移动较短的那一边

双索引技巧-滑动窗口

长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

解法

滑动窗口模板题文章来源地址https://www.toymoban.com/news/detail-490745.html

        while(end < n)
        {
            sum += nums[end ++];
            while(sum >= target)
            {
                res = min(res, end - start);
                sum -= nums[start];
                start ++;
            }
        }

到了这里,关于LeetCode刷题顺序(新手入门)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PyCharm新手入门指南

    安装好Pycharm后,就可以开始编写第一个函数:Hello World啦~我们就先来学习一些基本的操作,主要包含新建Python文件,运行代码,查看结果等等。 文章主要包含五个部分: 一、界面介绍 主要分为菜单栏、项目目录、编辑区域、终端区和运行/调试代码区域。 1、菜单栏:一些新

    2024年02月13日
    浏览(55)
  • 新手入门Jenkins自动化部署入门详细教程

    在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试; 或者前后端分离后,经常会修改接口,然后重新部署; 这些情况都会涉及到频繁的打包部署; 手动打包常规步骤: 1.提

    2024年02月13日
    浏览(53)
  • StarkNet新手入门教程:教你用bitget 钱包入门

    理想的Starknet (web3.bitget.com/zh/assets/starknet-wallet) 钱包取决于个人喜好,同时考虑安全性、用户友好性、帐户恢复选项和多通证支持等因素。尽管如此,无论您使用 Starknet (STRK) 的目的是持有还是交易,Bitget Wallet 都是您管理 STRK 以及其他以太坊和 Optimism 加密资产的理想钱包选择

    2024年03月12日
    浏览(52)
  • 【Linux】Git - 新手入门

    版本控制: 我们写的代码不是一成不变的,往往需要经过多次修改 但是可能会有一些尴尬的问题:比如我把代码改了,发现 bug 更多了,之前的代码也找不到了,怎么办? 难道每次写代码之前,我都要自己先备份一遍吗?这也太麻烦了 有没有一种工具可以自动帮我保存每次

    2024年01月15日
    浏览(46)
  • STEPN 新手入门及进阶

    先上STEPN中文白皮书 STEPN中文白皮书-V2.3 截至2月19日 - 知乎 大神的作品,官翻级别译本。 https://zhuanlan.zhihu.com/p/467799815 从0到第一次跑步 第一步 下载STEPN APP 苹果手机需要切到非大陆区的苹果商店,比如美区账号。具体账号可以直接去淘宝搜美区苹果购买,一般不到10块钱吧。

    2023年04月08日
    浏览(40)
  • 微服务框架Consul--新手入门

    Consul 是由 HashiCorp 开发的一款软件工具,提供了一组功能,用于服务发现、配置管理和网络基础设施自动化。它旨在帮助组织管理现代分布式和微服务架构系统的复杂性。以下是Consul的一些关键方面和功能: 服务发现:Consul 允许服务自行注册并以动态和自动化的方式发现其

    2024年02月07日
    浏览(45)
  • 【Jmeter】压力测试新手入门教程

    压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些应对措施。所以压力测试是一个非常重要的步骤,下面我带大家来使用一款压力测试工

    2024年04月15日
    浏览(52)
  • Linux新手入门必备------基本指令

    目录 一、获取帮助信息 1、man指令 2、help指令 3、常用快捷键 二、文件目录类 1、pwd 显示当前工作目录的绝对路径 2、ls 列出目录的内容 3、cd 切换目录 4、mkdir 创建一个新文件目录 5、touch 创建空文件 6、cp 复制文件或目录 7、rm / rmdir 删除文件或目录 8、mv 移动文件与目录或重

    2024年02月05日
    浏览(50)
  • 什么是智能合约?新手入门指南

    智能合约,也称为数字合约,在计算机网络中使用 区块链技术来履行预编程的合约 当合同的条件得到满足时,智能合同就会执行,例如向合同的一方发送付款。 智能合约之所以具有吸引力有多种原因: 不信任。 由于智能合约及其条款已经预先约定,智能合约可以通过区块

    2023年04月08日
    浏览(47)
  • Windows 驱动开发 新手入门(四)

    本系列所有文章 Windows 驱动开发 新手入门(一) Windows 驱动开发 新手入门(二) Windows 驱动开发 新手入门(三) Windows 驱动开发 新手入门(四) 本篇文章介绍一下设备对象,这是写驱动过滤的基础,比如键盘,串口等等的过滤。 PDO 是 Phsical Device Object 的缩写,直译就是物

    2023年04月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包