NowCoder
黑大帅本
Do not go gentle into that good night. Old age should burn and rave at close of day. Rage, rage against the dying of the light.
展开
-
每日一题:SwordOffer 07. 重建二叉树[前,中]
大家好,今天和大家分享一道二叉树的题目: 重建二叉树,让我们一起来看看把。 题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回构建好的二叉树。 思路: 我们知道二叉树的先序遍历的顺序是头左右,中序遍历是左头右。 也就是说可以依照这个顺序确定头结点,在上面的例子中,头结点root就是3,接下来,中序遍历会依照原创 2021-06-01 09:41:33 · 81 阅读 · 0 评论 -
每日一题:LC 连续数列
大家好,今天分享一道动态规划(Dynamic Programming)的题目,连续数列 给定一个整数数组,找出总和最大的连续数列,并返回总和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 这道题的调用:一个固定变量,两个可变变量,picked表示选过没有的状态,index表示当前的坐标. process(int[] a,int index,boolean picked) 如果选过了,那么有几种选择 1.选当前原创 2021-05-10 15:08:56 · 559 阅读 · 0 评论 -
每日一题:NowCode 01背包回顾
// 2021/4/28 Old Version public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算01背包问题的结果 * @param V int整型 背包的体积 * @param n int整型 物品的个数 * @param vw int整型二维数组 第一维度为n,第二维度为2的二维数组,vw[i][0],vw[i][1]分别描述i+1个物品的vi,wi原创 2021-05-10 09:24:10 · 125 阅读 · 0 评论 -
LC:322零钱兑换
大家好,今天和大家分享一道动态规划的题目,零钱兑换,让我们先看看题目叭 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每种硬币的数量是无限的。 这道题目,是一道典型的动态规划题,可以衍生出很多不一样的题目,如使用无限量的硬币组成的给定总金额的方法数是多少,其中有枚举的思想,斜率优化的技巧,总之这道题目代表了动态规划的一个新高度,笔者使用了3个小时,才使用代换法做出,特以此篇记原创 2021-05-06 17:05:14 · 112 阅读 · 0 评论 -
每日一题:剑指Offer12矩阵中的路径(我和大神的差距)
大家好,今天我们分享一道剑指Offer的题目:矩阵中的路径。 思路 这道题目的难点在于:1.如何匹配 2.往下一步走 3.怎么回退,不走入重复的格子 对于1.匹配使用 '='字符就可以。 对于2.往下一步就是i+/-1,j+/-1 对于3.不走入重复的格子,使用了记事本Memo,它是一个String类型的变量,会自动更新已经走过的格子的位置,为此我专门实现了一个同位数的二维数组位置生成器:),每一个数字用’_'隔开。 然而,这是用纯暴力的方法写的,笔者硬钢了一个小时才写完。 下面我们看一下对比: 大神原创 2021-05-05 17:16:21 · 77 阅读 · 0 评论 -
每日一题:NowCoder:子数组最大乘积
大家好,今天我们一起来看一下这道动态规划的题目,子数组最大乘积 思路 这道题目中子数组是连续的,求某一个连续的乘积是最大的。 这道题不知道如何使用dp加快速度,因为我选择的状态转移是有点复杂的。 他的两个状态:选过/没有选过 他的两个状态:往后走/不往后走 a往后走 1. 选这个2.不选这个 b不往后走 1. 选这个 2 不选这个 但是注意b2这个选项,如果不往后走,也不选的话,相当于没有东西,但是我们是要求至少有一个数的 所以b2的情况是可以省略的 共计三种选择 a1,a2,b1,b2(BE CA原创 2021-05-04 14:48:35 · 88 阅读 · 0 评论 -
每日一题:LC1011. 在 D 天内送达包裹的能力
这里是引用 public static int binary(int[] a,int left,int right){ while (left < right){ int mid = left + (right - left) / 2; if(mid == left) return a[left] == 1 ? left : right; if(a[mid] == 1) right = mid; .原创 2021-04-27 21:03:06 · 148 阅读 · 0 评论 -
每日一题:牛客——连续子数组的最大和
牛客——连续子数组的最大和 今天分享一道动态规划的题目,笔者使用了三种方法,后一种方法是前一种的优化版本,从牛客的测试反馈可以看到有些许的进步。 第一种方法:使用了一个全局变量进行最大和的记录。 但这种方法的问题在于,在主函数里面对子数组的开始位置使用for循环手动操作了,没有在process()方法里面把事情都做完,不是很优雅的code。并且该方法没有使用备忘录进行Memory 随后笔者对此进行优化 //运行时间:12ms 占用内存:9664KB public static int FindGre原创 2021-04-24 22:24:39 · 188 阅读 · 1 评论 -
牛客一题:找到搜索二叉树中两个错误的节点
牛客一题:找到搜索二叉树中两个错误的节点 今天分享一道在牛客网上的题目:找到搜索二叉树中两个错误的节点 结果,牛客网上面用例测试是通过的,反而显示没通过。 以此篇记 这一次的乌龙 各位朋友发现哪里有问题欢迎@楼主,互相学习 public static int[] findError (TreeNode root) { // write code here return process(root); } public static int[] proces原创 2021-04-07 17:37:11 · 251 阅读 · 3 评论