2024年5月13号刷题相关事项个人总结

01.01.03 LeetCode 入门及攻略(第 01 ~ 02 天)

1. LeetCode 是什么

「LeetCode」 是一个代码在线评测平台(Online Judge),包含了 算法数据库Shell多线程 等不同分类的题目,其中以算法题目为主。我们可以通过解决 LeetCode 题库中的问题来练习编程技能,以及提高算法能力。

LeetCode 上有 3000+ 道的编程问题,支持 16+ 种编程语言(C、C++、Java、Python 等),还有一个活跃的社区,可以用于分享技术话题、职业经历、题目交流等。

并且许多知名互联网公司在面试的时候喜欢考察 LeetCode 题目,通常会以手写代码的形式出现。需要面试者对给定问题进行分析并给出解答,有时还会要求面试者分析算法的时间复杂度和空间复杂度,以及算法思路。面试官通过考察面试者对常用算法的熟悉程度和实现能力来确定面试者解决问题的思维能力水平。

所以无论是面试国内还是国外的知名互联网公司,通过 LeetCode 刷题,充分准备好算法,对拿到一个好公司的好 offer 都是有帮助的。

2. LeetCode 新手入门

2.1 LeetCode 注册

  1. 打开 LeetCode 中文主页,链接:力扣(LeetCode)官网。
  2. 输入手机号,获取验证码。
  3. 输入验证码之后,点击「登录 / 注册」,就注册好了。

LeetCode 注册页面

2.2 LeetCode 题库

「题库」是 LeetCode 上最直接的练习入口,在这里可以根据题目的标签、难度、状态进行刷题。也可以按照随机一题开始刷题。

LeetCode 题库页面

1. 题目标签

LeetCode 的题目涉及了许多算法和数据结构。有贪心,搜索,动态规划,链表,二叉树,哈希表等等,可以通过选择对应标签进行专项刷题,同时也可以看到对应专题的完成度情况。

LeetCode 题目标签

2. 题目列表

LeetCode 提供了题目的搜索过滤功能。可以筛选相关题单、不同难易程度、题目完成状态、不同标签的题目。还可以根据题目编号、题解数目、通过率、难度、出现频率等进行排序。

LeetCode 题目列表

3. 当前进度

当前进度提供了一个直观的进度展示。在这里可以看到自己的练习概况。进度会自动展现当前的做题情况。也可以点击「进度设置」创建新的进度,在这里还可以修改、删除相关的进度。

LeetCode 当前进度

4. 题目详情

从题目大相关题目点击进去,就可以看到这道题目的内容描述和代码编辑器。在这里还可以查看相关的题解和自己的提交记录。

LeetCode 题目详情

2.3 LeetCode 刷题语言

大厂在面试算法的时候考察的是基本功,用什么语言没有什么限制,也不会影响成绩。日常刷题建议使用自己熟悉的语言,或者语法简洁的语言刷题。

相对于 Java、Python 而言,C、C++ 相关的语法比较复杂,在做题的时候一方面需要思考思路,另一方面还要研究语法。并且复杂的语法也不利于看懂思路,耗费时间较多,不利于刷题效率。在面试的时候往往需要一个小时内尽可能的完成更多的题目,C++ 一旦语法出错很容易慌乱。当然 LeetCode 周赛的大神更偏向于使用 C++ 刷题,这是因为用 C++ 参加算法竞赛已经成为传统了,绝大多数的 OI / ACM 竞赛选手都是 C++ 大神。

就我个人经历而言,我大学参加 ACM 竞赛的时候,用的是 C、C++ 和一点点的 Java。现在刷 LeetCode 为了更高的刷题效率,选择了 Python。感觉用 Python 刷题能更加专注于算法与数据结构本身,也能获得更快的刷题效率。

人生苦短,我用 Python。

2.4 LeetCode 刷题流程

在「2.2 LeetCode 题库 —— 4. 题目详情」中我们介绍了题目的相关情况。

LeetCode 题目详情

可以看到左侧区域为题目内容描述区域,在这里可以看到题目的内容描述和一些示例数据。而右侧是代码编辑区域,代码编辑区域里边默认显示了待实现的方法。

我们需要在代码编辑器中根据方法给定的参数实现对应的算法,并返回题目要求的结果。然后还要经过「执行代码」测试结果,点击「提交」后,显示执行结果为「通过」时,才算完成一道题目。

LeetCode 提交记录

总结一下我们的刷题流程为:

  1. 在 LeetCode 题库中选择一道自己想要解决的题目。
  2. 查看题目左侧的题目描述,理解题目要求。
  3. 思考解决思路,并在右侧代码编辑区域实现对应的方法,并返回题目要求的结果。
  4. 如果实在想不出解决思路,可以查看题目相关的题解,努力理解他人的解题思路和代码。
  5. 点击「执行代码」按钮测试结果。
    • 如果输出结果与预期结果不符,则回到第 3 步重新思考解决思路,并改写代码。
  6. 如果输出结果与预期符合,则点击「提交」按钮。
    • 如果执行结果显示「编译出错」、「解答错误」、「执行出错」、「超出时间限制」、「超出内存限制」等情况,则需要回到第 3 步重新思考解决思路,或者思考特殊数据,并改写代码。
  7. 如果执行结果显示「通过」,恭喜你通过了这道题目。

接下来我们将通过「1. 两数之和 - 力扣(LeetCode)」这道题目来讲解如何在 LeetCode 上刷题。

2.5 LeetCode 第一题

2.5.1 题目链接
  • 1. 两数之和 - 力扣(LeetCode)
2.5.2 题目大意

描述:给定一个整数数组 ���� 和一个整数目标值 ������。

要求:在该数组中找出和为 ������ 的两个整数,并输出这两个整数的下标。可以按任意顺序返回答案。

说明

  • 2≤����.�����ℎ≤104。
  • −109≤����[�]≤109。
  • −109≤������≤109。
  • 只会存在一个有效答案。

示例

  • 示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。Copy to clipboardErrorCopied
  • 示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]Copy to clipboardErrorCopied
2.5.3 解题思路
思路 1:枚举算法
  1. 使用两重循环枚举数组中每一个数 ����[�]、����[�],判断所有的 ����[�]+����[�] 是否等于 ������。
  2. 如果出现 ����[�]+����[�]==������,则说明数组中存在和为 ������ 的两个整数,将两个整数的下标 �、� 输出即可。
思路 1:代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            for j in range(i + 1, len(nums)):
                if i != j and nums[i] + nums[j] == target:
                    return [i, j]
        return []Copy to clipboardErrorCopied
思路 1:复杂度分析
  • 时间复杂度:�(�2),其中 � 是数组 ���� 的元素数量。
  • 空间复杂度:�(1)。
思路 2:哈希表

哈希表中键值对信息为 ������−����[�]:�,其中 � 为下标。

  1. 遍历数组,对于每一个数 ����[�]:
    1. 先查找字典中是否存在 ������−����[�],存在则输出 ������−����[�] 对应的下标和当前数组的下标 �。
    2. 不存在则在字典中存入 ������−����[�] 的下标 �。
思路 2:代码
def twoSum(self, nums: List[int], target: int) -> List[int]:
    numDict = dict()
    for i in range(len(nums)):
        if target-nums[i] in numDict:
            return numDict[target-nums[i]], i
        numDict[nums[i]] = i
    return [0]Copy to clipboardErrorCopied
思路 2:复杂度分析
  • 时间复杂度:�(�),其中 � 是数组 ���� 的元素数量。
  • 空间复杂度:�(�)。

理解了上面这道题的题意,就可以试着自己编写代码,并尝试提交通过。也可以通过我的解题思路和解题代码,理解之后进行编写代码,并尝试提交通过。

如果提交结果显示「通过」,那么恭喜你完成了 LeetCode 上的第一题。虽然只是一道题,但这意味着刷题计划的开始!希望你能坚持下去,得到应有的收获。

我自己记录的笔记:

今天开始做算法练习题

在刷算法题目之前,我先看了一下leetcode的刷题建议与指南

通过笔记我们已经了解了

2.4 LeetCode 刷题流程

下面让我们

跟着攻略真实的刷一道题目,体验一下全流程

2.5 LeetCode 第一题

2.5.1 题目链接
  • 1. 两数之和 - 力扣(LeetCode)
 2.5.2 题目大意

描述:给定一个整数数组 nums和一个整数目标值 target。

要求:在该数组中找出和为 target 的两个整数,并输出这两个整数的下标。可以按任意顺序返回答案。

说明

  • 2<=nums.length<=10^4
  • -10^9<=nums[i]<=10^9
  • -10^9<=target<=10^9
  • 只会存在一个有效答案
2.5.3 解题思路

因为我们目前还属于初始上手阶段,还有很多知识点没有学习,我们就用最简单的解法先来解决这个问题

思路 1:枚举算法

枚举是我们所有人都能够想到的解决方案

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            for j in range(i + 1, len(nums)):
                if i != j and nums[i] + nums[j] == target:
                    return [i, j]
        return []

思路 1:复杂度分析
  • 时间复杂度:O(n^2),其中 n 是数组 nums 的元素数量。
  • 空间复杂度:O(1)。



3. LeetCode 刷题攻略

3.1 LeetCode 前期准备

如果你是一个对基础算法和数据结构完全不懂的小白,那么在刷 LeetCode 之前,建议先学习一下基础的 「数据结构」 和 「算法」 知识,这样在开始刷题的时候才不会那么痛苦。

基础的 「数据结构」 和 「算法」 知识包括:

  • 常考的数据结构数组字符串链表树(如二叉树) 等。
  • 常考的算法分治算法贪心算法穷举算法回溯算法动态规划 等。

3.2 LeetCode 刷题顺序

如下:

推荐刷题顺序和目录如下:

1. 初级算法、2. 数组类算法、3. 数组和字符串、4. 链表类算法、5. 哈希表、6. 队列 & 栈、7. 递归、8. 二分查找、9. 二叉树、10. 中级算法、11. 高级算法、12. 算法面试题汇总。

当然还可以通过官方新推出的「学习计划 - 力扣」按计划每天刷题。

或者直接按照我整理的分类刷题列表进行刷题:

  • 刷题列表(GitHub 版)链接:点击打开「GitHub 版分类刷题列表」
  • 刷题列表(网页版)链接:点击打开「网页版分类刷题列表」

正在准备面试、没有太多时间刷题的小伙伴,可以按照我总结的「LeetCode 面试最常考 100 题」、「LeetCode 面试最常考 200 题」进行刷题。

说明:「LeetCode 面试最常考 100 题」、「LeetCode 面试最常考 200 题」是笔者根据「CodeTop 企业题库」按频度从高到低进行筛选,并且去除了一部分 LeetCode 上没有的题目和重复题目后得到的题目清单。

  • 「LeetCode 面试最常考 100 题(GitHub 版)」链接:点击打开「LeetCode 面试最常考 100 题(GitHub 版)」
  • 「LeetCode 面试最常考 200 题(GitHub 版)」链接:点击打开「LeetCode 面试最常考 200 题(GitHub 版)」

  • 「LeetCode 面试最常考 100 题(网页版)」链接:点击打开「LeetCode 面试最常考 100 题(网页版)」
  • 「LeetCode 面试最常考 200 题(网页版)」链接:点击打开「LeetCode 面试最常考 200 题(网页版)」

​​​​​​3.3 LeetCode 刷题技巧

五步法

第一步:将题目输入gpt,强制自己通过输入来思考和理解题目

第二步:

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

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

相关文章

jar包安装成Windows服务

一、前言 很多年前写过一篇《使用java service wrapper把windows flume做成服务》的文章&#xff0c;也是把jar包安装成windows服务&#xff0c;今天介绍另外一种更简便的方案。 二、正片 这次使用的工具是 winsw&#xff0c;一个Windows服务包装器。下面看详细介绍 首先从g…

开源禅道zentao的使用

很不幸禅道因为漏洞被人进攻了&#xff0c;被迫研究。 1.安装 直接使用docker进行部署&#xff0c;这里有非常多门道。官网的镜像easysoft-zentao是属于docker安装&#xff0c;而idoop的镜像虽然也是docker安装&#xff0c;但是实际是使用官网linux一键安装的版本&#xff0c…

默认成员函数:析构、深浅拷贝

析构函数 析构函数&#xff1a;与构造函数功能相反&#xff0c;析构函数不是完成对对象本身的销毁&#xff0c;局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数&#xff0c;完成对象中资源的清理工作。 特性 析构函数名时在类名前面加上字符~ class D…

国产华为设备:NAT地址转换实验

NAT地址转换实验 实验背景&#xff1a; 由于IPV4地址紧缺&#xff0c;企业内部一般都使用私有IP地址&#xff0c;然而&#xff0c;企业客户需要不定期访问公司内网&#xff0c;同时部分企业还会对外提供相应服务&#xff0c;此时需要配置NAT来实现这些需求。 实验目的&#xff…

WD—C++课前作业—30题

怎么会手和脚都在桌子上 目录 31&#xff0c;声明一个类 String,其数据成员为 char head[100],构造函数 String(char*Head)实现 head 的初始化&#xff0c;成员函数 void reverse()实现 head 内字符串的逆序存放&#xff0c;成员函数 void print()实现 head 内字符串的输出。…

第15节 编写shellcode加载器

我最近在做一个关于shellcode入门和开发的专题课&#x1f469;&#x1f3fb;‍&#x1f4bb;&#xff0c;主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料&#xff0c;内容里面的每一个环境我都亲自测试实操过的记录&#xff0c;有需要的小伙伴可以参考…

数据结构进阶——搜索二叉树

数据结构进阶——二叉搜索树 1. 二叉搜索树的概念和定义2. 二叉搜索树的操作2.1 二叉搜索树的插入2.2 二叉搜索树的查找2.3 二叉搜索树的删除 3. 二叉搜索树的实际应用3.1 两种模型加二叉搜索树完整代码3.2 KV模型练习 4. 二叉搜索树性能分析 1. 二叉搜索树的概念和定义 1. 二叉…

航电AFDX板卡,标准PMC规格、高性能ARINC664网络接口板卡

是一款标准PMC规格、高性能ARINC664网络接口板卡。该产品支持ARINC664网络仿真、测试及数据分析等应用需求&#xff1b;支持2个ARINC664端口&#xff0c;采用RJ45插件形式&#xff0c;每个端口高达64K缓存&#xff0c;2个端口可作为2个独立端口&#xff0c;也可作为冗余端口使用…

10G UDP协议栈 IP层设计-(5)IP RX模块

一、模块功能 1、解析目的IP是否是本节点的源IP&#xff0c;如果是则进行如下的处理&#xff0c;如果不是则无需上上级传递 2、提取MAC层发送过来的IP报文&#xff0c;并提取其中的数据字段&#xff08;上层协议字段&#xff09;&#xff0c;传递给上级 3、提取IP报文头中的…

Android Studio无法使用Google翻译问题记录

背景 其实关于Google翻译不能用的问题已经出现很久了&#xff0c;之前Google关掉了很多国内的一些Google服务&#xff0c;但是Google翻译还是能用的&#xff0c;直到不知什么时候起&#xff0c;Google翻译也不能用呢。 每次换电脑安装完AS后第一件事就是下载插件 Settings-Pl…

[ardunio ide导入blinker库]

1 blinker库下载地址 https://github.com/blinker-iot/blinker-library2 导入方法一 zip导入 项目 -> 导入库 ->添加.zip库 3 导入方法二

排序(一)----冒泡排序,插入排序

前言 今天讲一些简单的排序,冒泡排序和插入排序,但是这两个排序时间复杂度较大,只是起到一定的学习作用,只需要了解并会使用就行,本文章是以升序为例子来介绍的 一冒泡排序 思路 冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的序列&#xff0c;每次比较相邻…

【web网页开发制作】Html+Css+Js游戏主题特效及轮播效果网页作业天涯明月刀(7页面附源码)

HTMLCSSJS游戏主题轮播效果 &#x1f354;涉及知识&#x1f964;写在前面✨特效展示特效1、轮播幻灯效果特效2和3、鼠标悬浮及点击效果 &#x1f367;一、网页主题&#x1f333;二、网页效果Page1、首页Page2、游戏简介Page3、新闻中心Page4、互动专区Page5、视听盛宴Page6、用…

基于MSWA相继加权平均的交通流量分配算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于MSWA相继加权平均的交通流量分配算法matlab仿真.如图所示交通网络中&#xff0c;包含6个节点、11各路段、9个OD对。经枚举可得每个OD对间存在3条无折返有效路…

助力数字农林业发展服务香榧智慧种植,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建香榧种植场景下香榧果实检测识别系统

作为一个生在北方但在南方居住多年的人&#xff0c;居然头一次听过香榧&#xff08;fei&#xff09;这种作物&#xff0c;而且这个字还不会念&#xff0c;查了以后才知道读音&#xff08;fei&#xff09;&#xff0c;三声&#xff0c;这着实引起了我的好奇心&#xff0c;我相信…

“ModuleNotFoundError: No module named ‘selenium‘”报错如何解决

接上节&#xff1a;测试平台开发之测试框架改造并发执行及结果隔离(1) 上节博客的末尾提到&#xff1a;在命令窗口执行python main.py 可是执行的时候遇到了如下报错&#xff1a; ERRORS _____________________________________________________________ ERROR collecting te…

讲解SSM的xml文件

概述&#xff1a;这些配置文件很烦&#xff0c;建议直接复制粘贴 springMVC.xml文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XM…

Spring AI项目配置1.0.0-SNAPSHOT快照版指导

Spring AI项目配置1.0.0-SNAPSHOT快照版开发指导 说明pom文件修改 说明 请在更换Spring AI的全程中&#xff0c;科学上网&#xff0c;因为国内镜像和maven官方仓库还没有Spring AI的依赖&#xff0c;需要的依赖目前存放在https://repo.spring.io如果你使用的maven是自己配置&a…

Flutter 依据JSON数据自动生成实体类

json自动化生成工具 点击这里可以跳转 页面是这样的 然后在左边输入你的json数据&#xff0c;它会自动生成对应的实体类 生成的实体类是如下&#xff1a; import package:json_annotation/json_annotation.dart; part merch_region.g.dart;JsonSerializable()class MerchReg…

贷款中介CRM管理系统解决方案

一、贷款中介行业背景介绍 随着贷款中介行业的快速发展&#xff0c;贷款中介业务逐渐成为企业和个人融资的重要渠道。然而&#xff0c;贷款中介行业存在信息不对称、风险控制不力等难题。给金融稳定带来潜在风险。 二、方案目的和意义 鑫鹿贷款中介系统解决方案旨在规范贷款中…