力扣刷题方法整理
文章平均质量分 72
自身学习,总结学习过程
Fighting_1997
唯有勤奋不会辜负于你。
展开
-
Python 二进制常用方法总结
题目要求,查看二进制中1的个数1. 转换二进制统计bin转化为二进制def countBinary(n): return str(bin(n)).count('1')2. 二进制移位# int val; // input dataans = 0while val != 0: if val & 1: ans += 1 val >>= 1 return ans代码中val & 1表示val 与 0x000…0001(其中有31个原创 2022-03-28 11:36:35 · 5692 阅读 · 0 评论 -
一篇文章解决所有二叉树路径问题(问题分析+分类模板+题目剖析)
对于刚刚接触树的问题的新手而言,路径问题是一个比较棘手的问题。题解中关于二叉树路径问题的总结还偏少,今天我用一篇文章总结一下二叉树的路径问题。学透这篇文章,二叉树路径题可以秒杀问题分类二叉树路径的问题大致可以分为两类:1、自顶向下:顾名思义,就是从某一个节点(不一定是根节点),从上向下寻找路径,到某一个节点(不一定是叶节点)结束具体题目如下:257. 二叉树的所有路径面试题 04.12. 求和路径112. 路径总和113. 路径总和 II437. 路径总和 III988. 从叶结点开.原创 2022-03-23 14:17:20 · 383 阅读 · 0 评论 -
十大经典排序算法的理解、动图演示和Python、C、C++语言方法实现
1. 排序算法概述排序:将一组“无序”的记录序列调整为“有序”的记录序列排序算法平均时间复杂度最好情况最坏情况空间复杂度稳定性冒泡排序O(n2)O(n^2)O(n2)O(n)O(n)O(n)O(n2)O(n^2)O(n2)O(1)O(1)O(1)稳定选择排序O(n2)O(n^2)O(n2)O(n2)O(n^2)O(n2)O(n2)O(n^2)O(n2)O(1)O(1)O(1)不稳定插入排序O(n2)O(n^2)O(n2)O(n)O(n)O原创 2021-05-16 17:03:34 · 840 阅读 · 1 评论 -
Python3 maketrans()和translate方法
makertrans()和translate()方法描述maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。两个字符串的长度必须相同,为一一对应的关系。translate()表示建立好转换表后进行的映射操作例子# 映射关系mapping = [8,9,4,0,2,1,3,5,7,6]# 需要映射的数字nums = [991,338,38]# 1. 建立映射关系tab = s原创 2022-03-09 13:00:18 · 358 阅读 · 0 评论 -
C++求vector容器中的最大值(最小值)及其位置
方法:min_element和max_element输入参数为vector迭代器,输出为单一元素迭代器#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){ vector<int> a = { 2,4,6,7,1,0,8,9,6,3,2 }; auto maxPosition = max_element(a.b原创 2022-02-15 15:38:25 · 30676 阅读 · 3 评论 -
数据结构之二分法查找(左右边界,详细整理)
二分法作为数据结构的基础知识,经常作为使用,特意作为一次总结强调:二分法有两种形式,主要差异在于right的限制,本博客主要以其中一种方式展开,这种方式便于记忆和理解二分法查找pythondef binarySearch(nums: List[int], target[int]) -> int: left = 0, right = len(nums)-1 while left <= right: mid = left + (right - left) // 2 if nums原创 2022-02-14 11:15:16 · 2226 阅读 · 0 评论 -
C++ map自定义排序
STL中使用映射(map)时,常常希望能够根据自己的需要进行排序,排序的方法进行如下整理:一、对key值进行特定的排序map容器里面有两个值一个key一个是value,map<key,value>,其实map里面还有第三个参数,是一个类,用来对map的key进行排序的类,定义如下template<class _Kty, class _Ty, class _Pr = less<_Kty>, class _Alloc = allocator<pa原创 2021-12-19 19:02:12 · 4657 阅读 · 0 评论 -
二叉树中有关回溯问题讨论
目的最近在刷leetcode二叉树时,发现回溯算法在二叉树中还是比较常见的,也遇到了一些问题,目前是有一个较为清晰的认识,当然可能也存在错误,总结下来,以便日后查看!!问题以两个两叉树题目为主展开二叉树的所有路径简单的说,就是将二叉树的所有路径输出。代码呈现:class Solution {public: void dfs(TreeNode* node, string path, vector<string>& result){ if (node原创 2021-12-19 10:27:04 · 555 阅读 · 0 评论 -
Leetcode学习之单调栈
单调栈学习内容每日温度思路下一个更大元素I思路下一个更大元素II思路接雨水思路双指针法动态规划单调栈处理逻辑每日温度题目链接请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 3原创 2021-12-06 21:59:32 · 1012 阅读 · 0 评论 -
Leetcode学习之动态规划
文章目录1. 动态规划理论基础什么是动态规划动态规划的解题步骤动态规划应该如何debug2. 斐波那契数思路动规五部曲:3. 爬楼梯思路4. 使用最小关系爬楼梯思路5. 不同路径思路6. 不同路径II思路7.8.9.10.11.12.13.14.15.16.17.18.19.20.1. 动态规划理论基础动态规划刷题大纲什么是动态规划动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导原创 2021-11-24 11:59:00 · 625 阅读 · 0 评论 -
Leetcode学习之贪心算法
贪心算法理论基础题目分类大纲如下:什么是贪心贪心的本质是选择每一阶段的局部最优,从而达到全局最优。这么说有点抽象,来举一个例子:例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。再举一个例子如果是 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满,如果还每次选最大的盒子,就不行了。这时候就需要动态规划。动态规划的问题在下一个系列会详细讲解。贪心的套路(什原创 2021-11-22 13:22:13 · 1487 阅读 · 0 评论 -
Leetcode学习之回溯算法
1. 回溯算法理论基础什么是回溯法回溯法也可以叫做回溯搜索法,它是一种搜索的方式。在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏着回溯。回溯是递归的副产品,只要有递归就会有回溯。所以回溯函数也就是递归函数,指的都是一个函数。回溯法的效率回溯法的性能如何呢,必须强调的是,虽然回溯法很难,很不好理解,但是回溯法并不是什么高效的算法。**因为回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,**如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回原创 2021-11-14 14:31:15 · 5056 阅读 · 0 评论 -
二叉树学习之内容总结
1. 二叉树:递归函数究竟什么时候需要返回值,什么时候不要返回值?一般情况下:如果需要搜索整颗二叉树,那么递归函数就不要返回值,如果要搜索其中一条符合条件的路径,递归函数就需要返回值,因为遇到符合条件的路径了就要及时返回。其实还有一种就是后序遍历需要根据左右递归的返回值推出中间节点的状态,这种需要有返回值。另外,如果我们重建二叉树(比如删除等)root->left = traversal(root->left....)这种类型的时候,也会带有返回值,但是返回值不会中断迭代。2.递归函数什原创 2021-11-13 10:50:27 · 322 阅读 · 0 评论 -
C++ STL Set容器详解
Set容器set/ multiset 容器1 set基本概念简介:所有元素都会在插入时自动被排序本质:set/multiset属于关联式容器,底层结构是用二叉树实现。set和multiset区别:set不允许容器中有重复的元素multiset允许容器中有重复的元素2 运算符Set 版本Multiset 版本描述operator! = (set)operator! = (multiset)测试运算符左侧的 set 或 multiset 对象是否不等于原创 2021-11-01 23:44:49 · 813 阅读 · 0 评论 -
C++ STL Queue容器详解
queue 容器1 queue 基本概念概念:Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口。一个模板容器适配器类,它提供功能的限制,限制对一些基本容器类型的前端和后端元素的访问权限。 可以在后端添加或从前端移除元素,并且可以在队列的任何一端检查元素。适用于队列的基础容器类包括 deque 和 list队列容器允许从一端新增元素,从另一端移除元素队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据称为 — 入队原创 2021-11-01 23:17:26 · 723 阅读 · 0 评论 -
C++ String容器
String容器1. string基本概念本质:string是C++风格的字符串,而string本质上是一个类string和char * 区别:char * 是一个指针string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。特点:string 类内部封装了很多成员方法例如:查找find,拷贝copy,删除delete 替换replace,插入insertstring管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责2. 运原创 2021-11-01 22:20:44 · 234 阅读 · 0 评论 -
C++ STL Vector容器详解
vector容器1 vector基本概念功能:vector数据结构和数组非常相似,也称为单端数组vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间vector容器的迭代器是支持随机访问的迭代器2 函数名称说明assign清除矢量并将指定的元素复制到该空矢量。at返回对矢量中指定位置的元素的引用。back返回原创 2021-11-01 22:06:37 · 247 阅读 · 0 评论 -
C++STL标准库容器
C++ 标准库容器标准库为相关对象的存储集合提供了各种类型安全容器。容器是类模板。声明容器变量时,请指定容器将保存的元素的类型。可以使用初始值设定项列表构造容器。它们具有用于添加和删除元素以及执行其他操作的成员函数。可使用迭代器循环访问容器中的元素以及访问单个元素。可以使用其成员函数、运算符和全局函数显式使用iterator。还可以隐式使用它们,例如通过使用范围for循环。所有C++标准库容器的迭代器都有一个通用接口,但是每个容器都会定义自己的专用迭代器。容器可以分为三个类别:序列容器、关联容器和容原创 2021-11-01 21:55:19 · 477 阅读 · 0 评论 -
Leetcode学习之栈和队列
1. 栈和队列理论基础队列是先进先出,栈是先进后出。如图所示:首先大家要知道 栈和队列是STL(C++标准库)里面的两个数据结构。C++标准库是有多个版本的,要知道我们使用的STL是哪个版本,才能知道对应的栈和队列的实现原理。那么来介绍一下,三个最为普遍的STL版本:HP STL 其他版本的C++ STL,一般是以HP STL为蓝本实现出来的,HP STL是C++ STL的第一个实现版本,而且开放源代码。P.J.Plauger STL 由P.J.Plauger参照HP STL实现出来的,被V原创 2021-10-30 15:18:15 · 3973 阅读 · 0 评论 -
LeetCode刷题指南
LeetCode学习刷题不能毫无目的的刷题,应该是按照模块进行学习,我在学习的过程中,也不断整理了各个模块内容,有兴趣的小伙伴可以一起学习哦!!!数组学习链接链表学习链接哈希表学习链接字符串学习链接...原创 2021-10-27 20:33:12 · 337 阅读 · 0 评论 -
Leetcode学习之字符串
字符串学习1. 反转字符串题目链接编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例 2:输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”原创 2021-10-27 20:28:51 · 3480 阅读 · 0 评论 -
Leetcode学习之哈希函数
哈希函数1. 哈希理论基础哈希函数,把学生的姓名直接映射为哈希表上的索引,然后就可以通过查询索引下表快速知道这位同学是否在这所学校里了。哈希函数如下图所示,通过hashCode把名字转化为数值,一般hashcode是通过特定编码方式,可以将其他数据格式转化为不同的数值,这样就把学生名字映射为哈希表上的索引数字了。如果hashCode得到的数值大于 哈希表的大小了,也就是大于tableSize了,怎么办呢?此时为了保证映射出来的索引数值都落在哈希表上,我们会在再次对数值做一个取模的操作,就要我们就原创 2021-10-20 13:54:01 · 972 阅读 · 0 评论 -
数组替代哈希表减少内存和空间消耗
灵感来源:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。力扣(LeetCode)https://leetcode-cn.com/problems/valid-anagram/class Solution {public: bool isAnagram(string s, string t) { if (s.size() != t.size()) return原创 2021-10-17 14:29:44 · 413 阅读 · 0 评论 -
Leetcode学习之链表
链表1. 链表基础什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点是又两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链接的入口点称为列表的头结点也就是head。如图所示:1.1 链表类型单链表双链表单链表中的节点只能指向节点的下一个节点。双链表:每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。双链表 既可以向前查询也可以向后查询。如图所示:循环链表循环链表,顾名思义,就是链表原创 2021-10-16 14:08:16 · 1736 阅读 · 2 评论 -
Leetcode学习之数组
二分法1.二分法简介2.二分法实现3.Leetcode相关题目704 二分法查找35.搜索插入位置(opens new window)34.在排序数组中查找元素的第一个和最后一个位置69.x 的平方根367.有效的完全平方数原创 2021-10-08 12:33:10 · 1045 阅读 · 0 评论 -
LeetCode_罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值|I | 1|;V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。转载 2021-05-24 00:06:20 · 105 阅读 · 0 评论 -
LeetCode_两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。方法1:二分查找class Solution(object): def binary_search(self, lis, left, right, val): while left <= right: mid =原创 2021-05-23 08:26:49 · 108 阅读 · 0 评论 -
LeetCode_整数反转、回文数
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。方法1:转list分析方法class Solution(object): def reverse(self, x): """ :type x: int :rtype: int """ if x &原创 2021-05-21 23:34:24 · 144 阅读 · 0 评论