代码编织梦想

leetcode 1035 不相交的线-爱代码爱编程

题意理解:                  在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足:  nums1[i] == nums2[j]且绘制的直线不与任何其他连线(非水平线)相交。      

leetcode 518 零钱兑换 ii-爱代码爱编程

题意理解:         给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。         请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。         将coins看作不同重量的背包,然后把要凑成的组合数看作背包容量。         则该问题就

leetcode 1049 最后一块石头的重量ii-爱代码爱编程

题意理解:         有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。         每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。         思路转化:我们可以将题目转换为,将石头分为大小相等差不多的两堆,然后相

leetcode 494 目标和-爱代码爱编程

题意理解:         给你一个非负整数数组 nums 和一个整数 target 。         向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。

背包问题总结_0-爱代码爱编程

1.背包问题是什么?有哪些? 背包问题包含:0-1背包、完全背包、多重背包,还有一些特殊的如:分组背包、混合背包         0-1背包:多种物品,每个物品1个         完全背包:多种物品,每个物品n个         多重背包:多种物品,每个物品不一样多个 最基础的是:0-1背包、完全背包 竞赛类:分组背包、混合背

完全背包总结二-爱代码爱编程

1.完全背包和0/1背包的区别? 完全背包的物体有无限个,可以多次放入 0/1背包的物体只有一个,只能放入一次 2.关于物品遍历顺序 在0/1背包中为了防止物品被重复放入,所以选择倒序遍历背包 而完全背包中,可以重复放入,所以选择正序遍历背包 具体来说,如题目 重量价值物品1115物品2320物品3535 求大小为4的背包可获得的最

leetcode 121 买卖股票的最佳时机-爱代码爱编程

题意理解:         给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。         返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 

leetcode 376 摆动序列-爱代码爱编程

题意理解:         如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列          如果是摆动序列,前后差值呈正负交替出现         为保证摆动序列尽可能的长,我们可以尽可能的保留峰值,,删除上下坡的中间值,或平坡值。 解题思路:         已知要删除一些值来保证摆动序列的话,

leetcode 452. 用最少数量的箭引爆气球-爱代码爱编程

题意理解:         气球用一个闭区间表示,击中区间内任意一个位置,气球会被引爆。         区间指示了气球的位置和气球的可射击范围。         若两个气球位置有重叠,则一只箭能解决引爆两个气球。         目标:尽可能射击气球重叠最多的位置,用最少的箭引爆所有气球。 解题思路:        

leetcode700 二叉搜索树中的搜索-爱代码爱编程

题意理解:         首先明确二叉搜索树的定义:                 根节点的值大于左子树所有节点值,小于右子树所有节点值。         二叉搜索树有其自己的顺序,不需要刻意强调遍历顺序。 解题方法:         递归和遍历都可以用。因为是在树里按照一定的规律找一个节点,所以只是走一条路径。两个方法都很简

leetcode 538 把二叉搜索树转换为累加树-爱代码爱编程

理解题意:         所谓累加树:对于每个节点,将所有比它大的点累加于这一点。         而二叉搜索树:任何一个中间节点,都大于左子树任何节点,小于右子树所有节点。         而二叉搜索树中序排列是严格单调递增的序列。         所以二叉搜索树累加树的话,则是将右子树的节点加到中间节点,再将中间节点加到左

动态规划(一)什么是动态规划?-爱代码爱编程

1.动态规划是什么? 动态规划:动态规划常见基础题目之一。 官方的解释是:         动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。  我的理解:         动态规划总是体现在当前状态由前面的状态推导而来,前面的状态由更前面的状态推导。最开始的状态由定义给出,按照

leetcode 56 合并区间-爱代码爱编程

题意理解:                以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。         合并所有重叠的区间,并返回 一个不重叠的区间数组。         该数组需恰好覆盖输入中的所有区间 。         目标:合并所有重叠区间,则原有区间

leetcode 93 复原 ip 地址-爱代码爱编程

题意理解:         首先明确什么是正确的IP地址:简单理解三个小数点分割四个数字,每个数字的大小应在[0,255]内,且合法的数字表示不应该以0开头。         合法:0.1.2.201                        不合法:0.01.2.257         我们需要再合适的位置添加小数点。小数点总是添加

leetcode 17 电话号码的字母组合-爱代码爱编程

理解题意:         给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合                 本质上:数字代表着一个字母集合                 数字的个数决定了递归的深度,即树的深度                 数字代表的字母组合决定了当前树的宽度。         

leetcode 968 监控二叉树-爱代码爱编程

理解题意:         给定一个二叉树,我们在树的节点上安装摄像头。         节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。         计算监控树的所有节点所需的最小摄像头数量。         什么是监控?                  目标:最少的摄像头数目监控所有节点。 解题思路:

leetcode 746 使用最小花费爬楼梯-爱代码爱编程

题意理解:         给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。         一旦你支付此费用,即可选择向上爬一个或者两个台阶。         你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯         目标:使用最小的花费到达楼梯顶部。         例

leetcode 763 划分字母区间-爱代码爱编程

题意理解:         要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。         注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。         返回一个表示每个字符串片段的长度的列表。         输入:s = "ababc bacad efeg"         输出

leetcode 236 二叉树的最近公共祖先-爱代码爱编程

题意理解:         二叉树的最近公共祖先: 简单理解,就是p和q值的那两个节点,不断向上返回,然后会在一个点汇合,那么他们第一次汇合的这个点就是他们的最近公共祖先。 解题的思路就是:         如果这一层找到了p或q的值,就向上一层返回。         如果父节点的左右分别找了p、q节点,则返回父节点      

leetcode98 验证二叉搜索树-爱代码爱编程

题意理解:         首先明确二叉树的定义,对于所有节点,根节点的值大于左子树所有节点的值,小于右子树所有节点的值。 注意一个误区:         根节点简单和左孩子,右孩子比大小是不够的,要和子树比,如下图:        他每个节点根节点大于左孩子,小于右孩子。        但是他的每个根节点不大于左子树的所有节点的