
leetcode
文章平均质量分 50
不会长胖的女孩
这个作者很懒,什么都没留下…
展开
-
Leetcode1、两数之和
1、两数之和解法一:暴力循环public int[] twoSum(int[] nums, int target){ for(int i =0; i< nums.length; i++){ for(int j =i+1; j<nums.length;i++){ if(nums[i] + nums[j] == target){ return new int[] {i,j}; }原创 2022-04-23 15:08:49 · 378 阅读 · 0 评论 -
力扣刷题笔记
类 StringBuilder类 String 表示字符串, 比如“ abc ”。 类 StringBuilder 表示可改变大小的字符序列( sequence of characters ),多个字符组成字符序列,字符序列和字符串是同一个意思。二者的区别在于, String 类型的字符串是常量,字符串创建出来后不允许修改。而 StringBuilder 类型的字符串是可修改的。类 StringBuilder 有两个核心的 API ,分别是 append 和 insert 。前者的功能是在原来的字符串的原创 2022-04-23 15:06:36 · 445 阅读 · 0 评论 -
416. 分割等和子集
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2: 输入: [1, 2, 3, 5] 输出: false 解释: 数组不能分割成两个元素和相等的子集.提示:1 <= nums.length <= 2001 <= nums[i] <=原创 2021-12-28 20:04:01 · 600 阅读 · 0 评论 -
01背包问题动态规划
背包问题举例:动态规划五部曲:1、确定dp数组以及下标i的含义:dp[i][j] 表示的就是从下标为0-i 的物品中取,放进容量为 j 的背包,所获得的最大总和价值;2、递推公式:dp[i][j] = max(dp[i-1][j] , dp[i-1][j - weight[i]]+value[i])这里指的是,dp[i][j] 的状态可能有两种情况推导而来,①背包放不下物品 i , 那么此时的背包仍为dp[i-1][j] ; ② 背包能放下物品 i ,此时留给前面下标为1-i-1的物品的容量为j-原创 2021-12-27 22:18:21 · 535 阅读 · 0 评论 -
动态规划五部曲——力扣周总结
本文是根据代码随想录内容所改编,里面加了自己一些笔记,主要内容版权归代码随想录所有,详情请见代码随想录网站,该文是为了自己回忆和方便温习。62、不同路径力扣链接一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?输入:m = 3, n = 7 输出:28总结动态规划算法五部曲:1、确定dp数组和下标含义:2、确定递推公式3、dp原创 2021-12-26 14:20:05 · 1414 阅读 · 0 评论 -
贪心算法总结
贪心算法:从局部最优-》全局最优——摘自代码随想录原创 2021-12-20 19:16:19 · 89 阅读 · 0 评论 -
动态规划——使用最小花费爬楼梯 Leetcode746
思路:1、第i级台阶是第i-1级台阶的阶梯顶部。2、踏上第i级台阶花费cost[i],直接迈一大步跨过而不踏上去则不用花费。因此到达第i级台阶的阶梯顶部的最小花费,有两个选择:1、先付出最小总花费minCost[i-1] 到达第i级台阶(即第i-1级台阶的阶梯顶部),踏上第i级台阶需要再花费cost[i],再迈一步到达第i级台阶的阶梯顶部,最小总花费为**(minCost[i-1] + cost[i])**;2、先付出最小总花费minCost[i-2] 到达第i-1级台阶(即第i-2级台阶的阶梯原创 2021-12-11 11:25:33 · 273 阅读 · 0 评论 -
动态规划——爬楼梯 Leetcode 70
动态规划——爬楼梯原创 2021-12-11 11:01:29 · 245 阅读 · 0 评论 -
回溯解决电话号码的字母组合——leetcode17
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].思路:输入23,暴力法就是直接两层for循环,如果输入233,就是三层for循环。如果输入数字过多,循环次数过多,因此需要用到回溯法。难点:数字与字母的映射问题两个字母两个for循环,以此类推,发现有难度。输原创 2021-09-19 10:58:41 · 298 阅读 · 0 评论 -
回溯解决组合总和问题——leetcode216
题:找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。思路:相对于回溯算法的组合问题77多了一个限制,即找到和为n的k个数的组合,而整个集合已经是固定的了[1,…,9]。回溯三要素:返回值和参数: void参数:同组合问题,需要一个二维数组存放结果集合,和一个一维数组存放符合条件的结果。vector<vector<int>> result;vector<int> path;此时还需要一个原创 2021-09-18 22:25:19 · 416 阅读 · 0 评论 -
回溯解决组合问题——leetcode77
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。例:输入:n=4,k=2输出:[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]思路:回溯法的经典问题直接解法:使用循环,这里k=2,可以使用两个for循环,代码如下:int n=3;for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ cout<<i<<" "<<j<<en原创 2021-09-16 16:55:35 · 221 阅读 · 0 评论 -
回溯算法概括
1、回溯是递归的副产品,只要有递归就会有回溯。2、回溯的本质是穷举,所以并不高效。3、回溯法可以解决的问题:(1)组合问题:N个数中按一定规则找出k个数的集合(2)排列问题:N个数按一定规则全排列,有几种排列方式(3)切割问题:一个字符串按一定规则有几种切割方式(4)子集问题:一个N个数的集合里面有多少符合条件的子集(5)棋盘问题:N皇后,解数独等等4、如何理解回溯法:(1)可以抽象成树形结构(2)因为回溯法解决的都是在集合中递归查找子集,集合的大小构成了树的宽度,递归的深度,都构成了树原创 2021-09-16 14:52:26 · 149 阅读 · 0 评论 -
Leetcode刷题——二叉树的层次遍历
1、需要队列,队列先进先出,符合一层一层遍历的逻辑,而栈先进后出就符合递归(深度优先遍历)的逻辑。2、层级遍历就是图中的广度优先遍历。3、层次遍历的模板:4、给定一个二叉树,返回其节点值自底向上的层次遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)(107)解法:相对于层次遍历,就是最后把result数组翻转一下就可以。5、给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。即右视图。(199)解法:层序遍历的时候,判断是否遍历到单层的最原创 2021-09-15 16:23:32 · 256 阅读 · 0 评论 -
二叉树遍历中递归与迭代的区别
1、时间复杂度:递归与迭代差不多(在不考虑函数调用开销和函数调用产生的堆栈开销)。递归2、空间复杂度:递归开销大一些,因为递归需要系统堆栈存参数返回值等。总之,递归更容易理解,但收敛不好,容易栈溢出。在实际项目开发,应该避免递归,因为项目代码参数,调用关系比较复杂不容易控制递归深度,甚至会栈溢出。...原创 2021-09-15 15:00:42 · 381 阅读 · 0 评论 -
leetcode刷题——遍历二叉树的迭代法所用的栈知识
1、C++中栈(stack)的使用(1) 定义stack 对象的示例代码如下: stack<int> s1; stack<string> s2;(2) stack 的基本操作有: a) 入栈,如例:s.push();在栈顶增加元素 b) 出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不返回该元素。 c) 访问栈顶,如例:s.top() d) 判断栈空,如例:s.emp...原创 2021-09-15 10:33:43 · 166 阅读 · 0 评论