随笔分类 - 课程 / 题 / 前动态规划
摘要:背包问题技巧: 1.如果是0-1背包,即数组中的元素不可重复使用,nums放在外循环,target在内循环,且内循环倒序; for num in nums: for i in range(target, nums-1, -1): 2.如果是完全背包,即数组中的元素可重复使用,nums放在外循环,ta
阅读全文
摘要:一、题目 给你一个整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。
阅读全文
摘要:一、题目 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 二、思路 假定nums[]数组下标从1开始,如何确定f[i][j]的值? 我们一般去考虑最后一步,那么对于当前的数字 nums[i],可以选取也可以不选取: 1、不选
阅读全文
摘要:一、题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 二、思路 三、代码 class Solution { public: int trap(vector<int>& height) { int ans = 0; int left = 0, r
阅读全文
摘要:一、题目 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和 cost ,如果你可以绕环路行驶
阅读全文
摘要:一、题目 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。 二、思路 三、代码 class Solution: def longestPalindromeSubseq(self, s: st
阅读全文
摘要:一、题目 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 二、思路 dp[i]: 所有长度为i+1的递增子序列中, 最小
阅读全文
摘要:一、题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处: 0 <= j <= nums[i] i + j < n 返
阅读全文
摘要:一、题目 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 二、代码 class Solution { public: vector<string> generateParenthesis(int n) { dfs("", n, n); return r
阅读全文
摘要:一、题目 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,
阅读全文
摘要:一、题目 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 二、思路 dp[i][j] = (s[i] == s[j]) and dp[i + 1][j - 1] 三、代码 #include <iostream> #include <st
阅读全文
摘要:一、题目 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 二、思路 三、代码 class Solution: def longestCommonSubsequence(self, text1: str, text2: s
阅读全文
摘要:一、题目 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 二、思路 杨辉三角,是二项式系数在三角形中的一种几何排列。它是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。 三、代码 cla
阅读全文
摘要:一、题目 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 二、思路 我觉得这道题目的思想是: 走完这一生 如果我和你在一起会变得更好,那我们就在一起,否则我就丢下你。 我回顾我最光辉的时刻就是和不同人在一起
阅读全文
摘要:一、题目描述 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 二、思路 我的困扰是如何存储在数组,解决方案:将数组也传过去 三、代码 class Solution { public: void inorder(TreeNode* root, vector<int>& res) { i
阅读全文
摘要:一、题目描述 给你一个整数 n 。按下述规则生成一个长度为 n + 1 的数组 nums : nums[0] = 0 nums[1] = 1 当 2 <= 2 * i <= n 时,nums[2 * i] = nums[i] 当 2 <= 2 * i + 1 <= n 时,nums[2 * i +
阅读全文
摘要:一、题目描述 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 给定一个代表每个房屋存放金额的非负整数数组
阅读全文
摘要:一、题目描述 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。 返回 你能获得的 最大 利润 。 二、思路 定义状态 dp[i][0
阅读全文
摘要:一、题目描述 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 二、思路 根据状态的定义,由于 nums[i] 一定会被选取,并且以 nums[i] 结尾的连续子数组与以 nums[i - 1] 结尾的连续子
阅读全文
摘要:一、题目描述 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费。 二、思路 动态规划 三、代码 class
阅读全文