力扣专题

力扣72-编辑距离

题目链接 记忆化搜索: 解题关键:每次仅考虑两字符串word1、word2分别从0 - i修改成0-j下标的完全匹配(下标表示) 临界条件:当 i 或 j 小于0时,表示该字符串为空,编辑距离确定为 y+1 或 x+1 int dp[501][501]={0};class Solution {public:int minDistance(string word1, string word2

力扣HOT100 - 62. 不同路径

解题思路: 动态规划 注意要初始化第一行和第一列的值 class Solution {public int uniquePaths(int m, int n) {int[][] dp = new int[m][n];for (int i = 0; i < m; i++) {dp[i][0] = 1;}for (int j = 0; j < n; j++) {dp[0][j]

力扣HOT100 - 32. 最长有效括号

解题思路: 栈 class Solution {public int longestValidParentheses(String s) {int max = 0;// 也可以使用 Stack<Integer> stack=new Stack<>();但Stack是遗留类,不推荐Deque<Integer> stack = new LinkedList<>();stack.push(-1)

力扣HOT100 - 416. 分割等和子集

解题思路: 动态规划 对于当前考虑的元素 nums[i],如果 dp[ j - nums[ i ] ] 为 true,说明可以用前面的元素构成和为 j -nums[ i ] 的子集,那么在加上当前元素 nums[ i ] 的情况下,就可以构成和为 j 的子集,因此 dp[ j ] 更新为 true。如果 dp[ j - nums[ i ] ] 为 false,则说明无法使用前面的元素构成和

[链表专题]力扣141, 142

1. 力扣141 : 环形链表 题 :  给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。 如果链表中存在环 ,则返回 true

[数组专题]力扣88

1. 力扣88 : 合并两个有序数组 题 :  给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长

力扣刷题笔记(3)无重复字符的最长子串

文章目录 题目描述个人题解解题心得 题目描述 给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。 个人题解 class Solution {public://之所以使用哈希表集合这种数据结构,是因为其查找某个特定的元素的时间复杂度为常数级别int lengthOfLongestSubstring(string s) {//用于记录当前无重复字符的最长子串中的

力扣82题删除排序链表中的重复元素

82题删除排序链表中的重复元素 题目描述 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 题目分析 这个题需要返回已排序链表,我们需要考虑一种情况就是头结点为重复元素,那么我们把头结点删除之后没有办法再找到之后的节点了,这个时候我们需要设置一个虚头节点,来保证即使头结点删除了我们也能找到之后的节点我们需要新建一个指针c

力扣数据库题库学习(5.15日)--180. 连续出现的数字

180. 连续出现的数字 问题链接👍 思路 要解决这个问题,我们可以使用MySQL的窗口函数来找出至少连续出现三次的数字。具体方法是使用**窗口函数LAG()**来比较当前行的数字与前两行的数字,如果它们相同,就说明该数字连续出现了三次。 解答 具体的sql语句如下: SELECT DISTINCT num AS ConsecutiveNumsFROM (SELECTnum,LAG

力扣416. 分割等和子集

Problem: 416. 分割等和子集 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 该题目可以归类为0-1背包问题,具体到细节可以再归纳为背包是否装满问题 1.首先判断数组元素和的奇偶性(奇数则不能划分) 2.我们定义一个二维布尔类型数组,用于记录每一阶段的可选状态 3.针对于动态转移方程:我们要判断最终是否可以选取一些数使其和为原来数

5.14 力扣每日一题 贪心

2244. 完成所有任务需要的最少轮数 class Solution {public:int minimumRounds(vector<int>& tasks) {int n=tasks.size(),sum=0;sort(tasks.begin(),tasks.end()); //排序就不用哈希表int a;for(int i=0;i<n;){int ct=0;a=tasks[i];whi

力扣HOT100 - 322. 零钱兑换

解题思路: 动态规划 class Solution {public int coinChange(int[] coins, int amount) {int[] dp = new int[amount + 1];Arrays.fill(dp, amount + 1);dp[0] = 0;for (int i = 1; i <= amount; i++) {for (int j = 0;

129.哈希表:有效的字母异位词(力扣)

242. 有效的字母异位词 - 力扣(LeetCode) 题目描述 代码解决以及思路 这个方法的时间复杂度为O(N),其中N是字符串的长度,空间复杂度为O(1)(因为辅助数组的大小是固定的26)。 class Solution {public:bool isAnagram(string s, string t) {// 创建一个大小为26的整数数组,用于存储每个字母的出现次数int

力扣刷题--数组--第五天

昨天做了几道关于双指针求解的算法题,今天继续看相关的题目。 844. 比较含退格的字符串   给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。   注意:如果对空文本输入退格字符,文本继续为空。 示例 1:输入:s = "ab#c", t = "ad#c"输出:true解释:s 和 t 都会变成 "ac"。示例 2:

贪心 -力扣860.柠檬水找零力扣2208.将数组和减半的最少操作次数力扣179.最大数力扣376.摆动序列

目录 力扣860.柠檬水找零 力扣2208.将数组和减半的最少操作次数 力扣179.最大数 力扣376.摆动序列 贪心策略,局部最优->全局最优 1.把解决问题的过程分为若干步骤 2.解决每一步的时候,都选择当前看起来“最优秀的”解法 3.希望能够得到全局最优解 例子1:找零问题 50-4=46  ->[20,10,5,1] 46->26->6->5->1   找当前能够

【数据结构与算法】力扣 49. 字母异位词分组

题目描述 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]输出: [["bat"],["nat","tan"],["ate","eat","tea"]] 示例 2: 输

[力扣题解]452. 用最少数量的箭引爆气球

题目:452. 用最少数量的箭引爆气球 思路 贪心法 希望尽可能射爆叠在一起的气球; 以气球的左边界进行升序排序,再从左到右遍历,遇到有重叠的气球,则让当前气球的有边界与上一个气球的右边界对齐(min操作); 代码 class Solution {private:static bool compare(vector<int> a, vector<int> b){return a[0] <

25. K 个一组翻转链表 - 力扣(LeetCode)

基础知识要求: Java:方法、while循环、for循环、if else语句 Python: 方法、while循环、for循环、if else语句 题目:  给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改

力扣HOT100 - 763. 划分字母区间

解题思路: class Solution {public List<Integer> partitionLabels(String s) {int[] last = new int[26];int len = s.length();for (int i = 0; i < len; i++) {last[s.charAt(i) - 'a'] = i;//记录字母最远的下标}List

【力扣一轮】链表-删除链表指定值的元素

删除链表指定元素 力扣链接 代码随想录题解 分为两个版本,一个是带有虚拟头节点,一个是不带。 无论是带有还是不带有,我都遇到了这几个问题: ①while循环时的判断,首先要判断当前节点是否为空,接着才能判断当前节点的下一个位置是否为空。 ②需要有另一个指针来遍历当前链表。 带有虚拟头节点的代码: ListNode* removeElements(ListNode* head, in

【错误的集合】力扣python

最初想法 def findErrorNums(nums):n = len(nums)duplicate = -1missing = -1for num in nums:if nums[abs(num) - 1] < 0:duplicate = abs(num)else:nums[abs(num) - 1] *= -1for i in range(n):if nums[i] > 0:mis

力扣【旋转函数】python

如果直接用暴力的话,只能过4个样例好像,超时 因此得用递推公式 F1=F0+前n-1个数-(n-1)*第n个数     =F0+sum(nums)-n*第n个数 n=len(nums)ans=[]#定义一个存最大值值的列表ss = sum(nums)dm = 0for j in range(n):dm += j * nums[j]ans.append(dm)print(dm

【力扣】164. 最大间距

164. 最大间距 题目描述 给定一个无序的数组 nums,返回 数组在排序之后,相邻元素之间最大的差值 。如果数组元素个数小于 2,则返回 0。 您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。 示例 1: 输入: nums = [3,6,9,1]输出: 3解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。

单链表经典算法OJ题---力扣21

1.链接:. - 力扣(LeetCode)【点击即可跳转】 思路:创建新的空链表,遍历原链表。将节点值小的节点拿到新链表中进行尾插操作 遍历的结果只有两种情况:n1为空 或 n2为空 注意:链表为空的情况 代码实现:【下面有进行优化】 struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode*

力扣HOT100 - 55. 跳跃游戏

解题思路: class Solution {public boolean canJump(int[] nums) {int n = nums.length;int maxReach = 0;// 正常来说每次至少跳一格,所以最多循环n次for (int i = 0; i < n; i++) {if (i > maxReach) return false;// 这种情况代表遇到了0,跳不动了i

力扣第130场双周赛

判断矩阵是否满足条件 给定二维矩阵,判断所有格子是否满足如下条件: 如果它下面的格子存在,那么它需要等于它下面的格子如果它右边的格子存在,那么它需要不等于它右边的格子 遍历二维矩阵,简单模拟即可。 class Solution {public:bool satisfiesConditions(vector<vector<int>>& grid) {auto m = grid.size