![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题
noworldling
这个作者很懒,什么都没留下…
展开
-
算法---常见排序算法
排序算法原创 2022-08-01 19:31:25 · 382 阅读 · 1 评论 -
算法复杂度介绍
复杂度分析是估算算法执行效率的方法,**公式O(f(n))表示算法的复杂度**,此方法即为**大O复杂度表示法O(f(n))中n表示数据规模**,**f(n)表示运行算法所需要执行的指令数**。原创 2022-07-19 23:53:48 · 453 阅读 · 0 评论 -
LeetCode 剑指 Offer II 010. 和为 k 的子数组
文章目录题目思路1.滑动窗口2.枚举3.前缀和+哈希表完整代码题目给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数。思路1.滑动窗口这道题我一开始想到的是用滑动窗口方法,但是题目里表明了nums[i]的范围,里面包含了负数,所以并不能使用滑动窗口。2.枚举我们可以通过枚举[0…i]中所有的下标是否存在符合题意的子数组。count=0 for right in range(len(nums)): s=0原创 2022-04-13 16:01:31 · 639 阅读 · 0 评论 -
LeetCode 567. 字符串的排列(滑动窗口)
文章目录题目解题思路1.暴力求解2.滑动窗口完整代码题目给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。换句话说,s1 的排列之一是 s2 的 子串 。解题思路当s2中某一段中的各字符数量和s1相同时,则返回True1.暴力求解先找出s1的全排列,然后再以相同长度在s2上滑动,判断该字段是否是s1的全排列之一。该方法能解决一部分问题,但当s1的字符过多时,会超时。2.滑动窗口统计字符个数,我们可以想到直原创 2022-04-06 15:36:35 · 291 阅读 · 0 评论 -
LeetCode 3. 无重复字符的最长子串(滑动窗口)
题目给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。解题思路这道题主要用到思路是:滑动窗口滑动窗口其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。所以,我们要移动这个队列!如何移动?我们只要把队列的左边的元素移出就行了,直到满足题目要求!一直维持这样的队列,找出队列出现最长的长度时候,求出解!完整代码class Solution: def lengthOfL原创 2022-04-05 21:44:18 · 66 阅读 · 0 评论 -
LeetCode 51.N皇后
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。解题思路:这个题是非常经典的回溯题了,题目没有描述的很清楚,皇后之间不互相攻击的条件是不在同一行,同一列和同一对角线上。n皇后本质也是一个求组合问题,自然可以用回溯的思想去做。回溯的话我们首先找一下他的约束条件:1.不在同一行原创 2022-03-23 22:13:19 · 72 阅读 · 0 评论 -
Leetcode刷题36. 有效的数独
题目:请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。空白格用 ‘.’ 表示。解题思路:拿到是否重复这种题,第一反应就是需要建立第三个数组或者哈希表来记录当前元素是否出现过。由该题原创 2022-03-22 12:21:24 · 564 阅读 · 0 评论 -
Leetcode 14.最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。方法1:当然是暴力求解 不过多叙述 循环搞定if not strs: return ""s=strs[0]for i in range(len(s)): for j in range(1,len(strs)): if i>len(strs[j])-1 or s[i]!=strs[j][i]: return s[:i]return s方法2:利用pyth原创 2022-03-18 11:01:09 · 481 阅读 · 0 评论 -
剑指 Offer II 049. 从根节点到叶节点的路径数字之和
剑指 Offer II 049. 从根节点到叶节点的路径数字之和题目:给定一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。每条从根节点到叶节点的路径都代表一个数字:例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。计算从根节点到叶节点生成的 所有数字之和 。叶节点 是指没有子节点的节点。解题思路:利用递归便利左右节点,当左右子节点都为空时,返回。class Solution {public: int sumNu原创 2021-10-03 20:47:05 · 94 阅读 · 0 评论 -
剑指 Offer II 038. 每日温度
剑指 Offer II 038. 每日温度题目:请根据每日 气温 列表 temperatures ,重新生成一个列表,要求其对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例子:输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0]思路:同样利用栈的后进先出的原理。将还没有出现更高温度之前的索引都写入栈里面。这样就保证了栈里面索引所代表的温度呈现一个递减原创 2021-09-24 22:15:45 · 112 阅读 · 0 评论 -
剑指 Offer II 037. 小行星碰撞
剑指 Offer II 037. 小行星碰撞题目:给定一个整数数组 asteroids,表示在同一行的小行星。对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正表示向右移动,负表示向左移动)。每一颗小行星以相同的速度移动。找出碰撞后剩下的所有小行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。解题思路:首先这题需要利用栈来存储最后留下的小行星。我们分情况讨论,(我们设置一个栈叫nu原创 2021-09-24 21:34:37 · 90 阅读 · 0 评论 -
剑指 Offer II 036. 后缀表达式
剑指 Offer II 036. 后缀表达式题目要求:根据 逆波兰表示法,求该后缀表达式的计算结果。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。例子:输入:tokens = [“2”,“1”,"+",“3”,"*"]输出:9解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9思路:首先对题目意思进行理解,比如上面的例子:1.首先输入2,判断为数字,将其存入数组2.其次输入1,判断为数字,继续存入数组3.输入为+号,不存原创 2021-09-24 20:23:45 · 92 阅读 · 0 评论 -
剑指 Offer II 035. 最小时间差
剑指 Offer II 035. 最小时间差题目要求:给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。解题思路:思路较为简单,将字符串表示的时间转化为分钟表示,并从小到大排序存储在新的数组中。(注意:在排序过后的数组中,我们需要在末尾加入最小的分钟数+24*60。 最后就是循环数组找到前后差距最小的分钟数。class Solution {public: int findMinDifference(vector<str原创 2021-09-24 19:01:43 · 61 阅读 · 0 评论 -
剑指 Offer II 032. 有效的变位词
剑指 Offer II 032. 有效的变位词题目要求:给定两个字符串 s 和 t ,编写一个函数来判断它们是不是一组变位词(字母异位词)。注意:若 s 和 t 中每个字符出现的次数都相同且字符顺序不完全相同,则称 s 和 t 互为变位词(字母异位词)。解题思路:如果是一组变位词,那么同一个字符在两个字符串中出现的次数应该是想相同的。即定义一个26长度的数组用来存储字符出现次数,s中每个字符出现一次+1,t中每个字符出现一次相应位置-1。如果是变位词,那么最后得到的就应该是一个全零数组。clas原创 2021-09-23 21:16:07 · 112 阅读 · 0 评论 -
剑指 Offer II 026. 重排链表
剑指 Offer II 026. 重排链表题目:给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln-1 → Ln请将其重新排列后变为:L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。解题思路:1.将链表拆成前后单独的两个链表2.将后半部分的链表翻转3.将新的两个链表轮流接连起来代码如下:class Solution {public://翻转链表函数原创 2021-09-23 14:11:08 · 61 阅读 · 0 评论 -
剑指offer2笔记 :25. 链表中的两数相加。
剑指offer2笔记 :25. 链表中的两数相加。给定两个 非空链表 l1和 l2 来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。可以假设除了数字 0 之外,这两个数字都不会以零开头。解题思路:1.将链表反转。将右端对齐,这样可以从头地址开始向下遍历。2.相加的时候注意进位。3.讲最后的结果再次翻转。代码如下class Solution {public: ListNode* reverse(ListNode*head原创 2021-09-22 20:06:17 · 114 阅读 · 0 评论