08 2024 档案

摘要:647 回文字串 func countSubstrings(s string) int { // 动规五部曲 // dp[i][j] 表示s[i: j+1] 区间是否是一个回文 // if s[i] == s[j] {if i-j <= 1 || dp[i+1][j-1] == true { dp[ 阅读全文
posted @ 2024-08-31 10:45 周公瑾55 阅读(27) 评论(0) 推荐(0) 编辑
摘要:115 不同子序列 func numDistinct(s string, t string) int { // 动态规划,思考一下判断连续和不连续的区别,如果相等都是左上角+1, 如果不等,连续情况就是直接等于左上角,不连续情况直接归零 // dp[i][j] 表示s[i] 中存在 t[j] 结尾的 阅读全文
posted @ 2024-08-30 11:27 周公瑾55 阅读(16) 评论(0) 推荐(0) 编辑
摘要:1143 最长公共子序列 func longestCommonSubsequence(text1 string, text2 string) int { // 思路和判断最长公共数组一样 // dp[i][j] 表示以text1[i], text2[j]为结尾的最长公共子序列的长度 // if te 阅读全文
posted @ 2024-08-29 11:17 周公瑾55 阅读(9) 评论(0) 推荐(0) 编辑
摘要:300 最长递增子序列 var path []int var res int func lengthOfLIS(nums []int) int { // 尝试回溯思路 if len(nums) == 1 { return 1 } path = []int{} res = 0 backtracking 阅读全文
posted @ 2024-08-28 11:35 周公瑾55 阅读(13) 评论(0) 推荐(0) 编辑
摘要:188 买卖最佳实际IV(k次机会交易) func maxProfit(k int, prices []int) int { // 此题相比买卖两次条件改为买卖k次,所以dp数组行树需要增加为k*2 + 1 // dp[i][j]表示 if j%2 == 1 第i天第j/3次持有股票获得的收益, j 阅读全文
posted @ 2024-08-27 10:43 周公瑾55 阅读(7) 评论(0) 推荐(0) 编辑
摘要:121 买卖股票最佳时机 func maxProfit(prices []int) int { // dp五部曲 // 1 dp数组以及下标含义 dp[i][0] 表示第i天持有股票 dp[i][1] 表示第i天不持有 // 2 递推公式,dp[i][0] = max(dp[i-1][0], 0-p 阅读全文
posted @ 2024-08-26 11:04 周公瑾55 阅读(12) 评论(0) 推荐(0) 编辑
摘要:198 打家劫舍 func rob(nums []int) int { // 思路,动态规划 // dp[i] 代表前下标为i能装的最大盗窃物品价值 // 递推 dp[i] = max(dp[i-1], dp[i-2]+v(i)) // dp[i-1] 代表不偷物品i, dp[i-2]+v(i) 代 阅读全文
posted @ 2024-08-24 11:12 周公瑾55 阅读(8) 评论(0) 推荐(0) 编辑
摘要:322 零钱找还 func coinChange(coins []int, amount int) int { // 装满,并且硬币无限,可以类比完全背包问题 // dp[i][j] 表示前i个物品装满容量为j的背包所需要的最少物品数量 // 递推公式 dp[i][j] = min(dp[i-1][ 阅读全文
posted @ 2024-08-23 12:00 周公瑾55 阅读(7) 评论(0) 推荐(0) 编辑
摘要:0-1 背包问题 在 0-1 背包问题中,每种物品只能选择一次,因此一旦选择某个物品后,剩余的容量只能放入前面的物品。这就是为什么状态转移方程是: dp[i][j] = max(dp[i-1][j], dp[i-1][j-w(i)] + v(i)) 这里的 dp[i-1][j-w(i)] + v(i 阅读全文
posted @ 2024-08-22 11:25 周公瑾55 阅读(8) 评论(0) 推荐(0) 编辑
摘要:1049 最后一块石头重量|| func lastStoneWeightII(stones []int) int { // 本题思路在于要想得到最小差,就要尽可能将石头分割为两堆相近的重量,然后转换为背包问题 // dp[i] 表示容量i背包能装的石头总价值,其中重量和价值相等 // 递推公式 dp 阅读全文
posted @ 2024-08-21 11:50 周公瑾55 阅读(8) 评论(0) 推荐(0) 编辑
摘要:背包问题 有n件物品和一个最多能背重量为 w 的背包。第i件物品的重量是 weight[i],得到的价值是 value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 // pake // // @Description: // @param weights: 物品i对应重量 阅读全文
posted @ 2024-08-20 11:22 周公瑾55 阅读(8) 评论(0) 推荐(0) 编辑
摘要:不同路径 func uniquePaths(m int, n int) int { // dp五部曲 // dp数组以及下标的含义 dp[i][j]代表从0,0 走到i,j的不同路径条数 // 递推公式 dp[i][j] = dp[i-1][j] + dp[i][j-1] // dp数组的初始化 d 阅读全文
posted @ 2024-08-19 11:10 周公瑾55 阅读(8) 评论(0) 推荐(0) 编辑
摘要:509 斐波那契数列 func fib(n int) int { // dp五部曲 // 1 dp数组含义以及下标含义: 本题保存的是完整的斐波那契数列,i 对应数列的第i个数字 // 2 递推公式: F(n) = F(n - 1) + F(n - 2) // 3 dp数组初始化: 由递推公式推到, 阅读全文
posted @ 2024-08-17 11:42 周公瑾55 阅读(3) 评论(0) 推荐(0) 编辑
摘要:56 合并区间 func merge(intervals [][]int) [][]int { // 思路先排序,然后按照后一个左区间和前一个右区间进行对比判断是否重叠,重叠扩充右区间 sort.Slice(intervals, func(i, j int) bool { if intervals[ 阅读全文
posted @ 2024-08-16 10:49 周公瑾55 阅读(4) 评论(0) 推荐(0) 编辑
摘要:452 射爆气球 func findMinArrowShots(points [][]int) int { // 思路,尝试按照start asc,end asc 排序一下, 取交集射爆 if len(points) == 1{ return 1 } sort.Slice(points, func 阅读全文
posted @ 2024-08-15 11:46 周公瑾55 阅读(5) 评论(0) 推荐(0) 编辑
摘要:加油站 func canCompleteCircuit(gas []int, cost []int) int { // 思路,首先统计一个差值数组,表示行驶到下一个加油站可以补充的油量,然后加总差值数组, // 如果小于0,表示从起始位置到目前为止剩余油量小于0,不足以跑完全程,同时将起始位置放到遍 阅读全文
posted @ 2024-08-14 11:49 周公瑾55 阅读(3) 评论(0) 推荐(0) 编辑
摘要:122 买卖股票最佳时机2 func maxProfit(prices []int) int { // 思路,因为支持同一天买入卖出,所以利润最大应该是所有正利润的加总结果 var sum int for i:=1; i<len(prices); i++ { if prices[i] - price 阅读全文
posted @ 2024-08-13 11:34 周公瑾55 阅读(4) 评论(0) 推荐(0) 编辑
摘要:分饼干 func findContentChildren(g []int, s []int) int { // 第一思路,双指针暴力解法 var count int var used2 = make([]bool, len(s)) g = quicksort(g) s = quicksort(s) 阅读全文
posted @ 2024-08-12 12:12 周公瑾55 阅读(8) 评论(0) 推荐(0) 编辑
摘要:491 递增子序列 func findSubsequences(nums []int) [][]int { // 思路,在原数组上面找寻递增子序列,所以不能改变顺序, var path []int var res [][]int //nums = quicksort(nums) backtracki 阅读全文
posted @ 2024-08-10 14:19 周公瑾55 阅读(11) 评论(0) 推荐(0) 编辑
摘要:93 复原ip地址 func restoreIpAddresses(s string) []string { // 字符串分割问题,考虑回溯算法 var path, res []string if len(s) < 4 { return res } backtracking(s, &path, &r 阅读全文
posted @ 2024-08-09 12:37 周公瑾55 阅读(6) 评论(0) 推荐(0) 编辑
摘要:39 组合总和 func combinationSum(candidates []int, target int) [][]int { // 思路,组合问题考虑回溯算法,考虑到元素可能重复问题,所以,树的最大深度应该是target / min(candudates) + 1 var path = [ 阅读全文
posted @ 2024-08-08 13:18 周公瑾55 阅读(7) 评论(0) 推荐(0) 编辑
摘要:回溯问题 回溯通常用来解决这些问题 组合问题:N个数里面按一定规则找出k个数的集合 切割问题:一个字符串按一定规则有几种切割方式 子集问题:一个N个数的集合里有多少符合条件的子集 排列问题:N个数按一定规则全排列,有几种排列方式 棋盘问题:N皇后,解数独等等 回溯的通用模板func backtrac 阅读全文
posted @ 2024-08-07 13:51 周公瑾55 阅读(7) 评论(0) 推荐(0) 编辑
摘要:669 修建二叉树 func trimBST(root *TreeNode, low int, high int) *TreeNode { // 暴力笨方法, 遍历,删除范围之外的节点 if root == nil { return nil } var res []int inorder(root, 阅读全文
posted @ 2024-08-06 11:51 周公瑾55 阅读(6) 评论(0) 推荐(0) 编辑
摘要:235 二叉搜索树最近公共祖先 unc lowestCommonAncestor(root, p, q *TreeNode) *TreeNode { // 本题相较于普通二叉树寻找最近公共祖先加了题设条件二叉搜索树,所以使用二叉搜索树特性 // 如果root 大于两个目标节点,那么目标都在root左 阅读全文
posted @ 2024-08-05 11:48 周公瑾55 阅读(10) 评论(0) 推荐(0) 编辑
摘要:530 二叉搜索树最小差 var min int var prev *TreeNode func getMinimumDifference(root *TreeNode) int { // 二叉搜索树,中序遍历比较相邻两个元素差,并返回最小绝对差 min = math.MaxInt prev = n 阅读全文
posted @ 2024-08-03 11:57 周公瑾55 阅读(9) 评论(0) 推荐(0) 编辑
摘要:645 最大二叉树 func constructMaximumBinaryTree(nums []int) *TreeNode { // 思路,算法思路基本等同于通过中序前序构造二叉树 // 1, 取最大值作为根节点 // 2, 切割数组 // 3, 递归左右子树 if len(nums) == 0 阅读全文
posted @ 2024-08-02 11:58 周公瑾55 阅读(5) 评论(0) 推荐(0) 编辑
摘要:切片传递问题 question: 什么情况下传递切片,什么情况下传递切片指针,为什么有时候会修改原始副本,有时候又不会呢? type sli []int func main() { slice := []int{1} fmt.Printf("slice: %p\n", slice) change1( 阅读全文
posted @ 2024-08-01 13:08 周公瑾55 阅读(4) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.
🚀
回顶
展开