上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 18 下一页
摘要: 同上一篇剪绳子,题目不同点在于 n 的范围变大,当n过大时,乘积结果过大会导致溢出。 因此不能直接使用动态规划求解。 如果在上题中的动态规划中加入大数运算,虽然能得到结果,但效率过低,如下图所示: 如果使用上题中的数学方法解题,能正常得出结果,代码如下: class Solution { publi 阅读全文
posted @ 2021-02-21 14:24 zjcfrancis 阅读(44) 评论(0) 推荐(0) 编辑
摘要: 思路: 1.动态规划 首先想到的肯定是暴力解法,将所有情况列举出来再计算,时间复杂度O(2^n),很明显这种做法会超时。 如何改进暴力解法呢?在计算时会发现暴力解法实际上是将求解F(n)的问题分解成求解F(n-1)的问题。 由此可以使用动态规划的解法。 定义一个数组dp,其中 dp[i] 表示的是长 阅读全文
posted @ 2021-02-21 13:41 zjcfrancis 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 一个二叉树的遍历序列不能决定一棵二叉树,但某些不同的遍历序列组合可以唯一确定一棵二叉树。 给定一棵二叉树的前序遍历序列和中序遍历序列可以唯一确定一棵二叉树的结构,给定一棵二叉树的后序遍历序列和中序遍历序列也可以唯一确定一棵二叉树的结构。 注意:这还有一个条件:二叉树的任意两个结点的值都不相同。 一. 阅读全文
posted @ 2021-02-19 14:52 zjcfrancis 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 设节点 root 为节点 p, q 的某公共祖先,若其左子节点 root.left 和右子节点 root.right 都不是 p,q 的公共祖先,则称 root 是 “最近的公共祖先” 。 根据以上定义,若 root 是 p, q 的最近公共祖先 ,则只可能为以下情况之一: p 和 q 在 root 阅读全文
posted @ 2021-02-18 23:42 zjcfrancis 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 位运算模拟运算 因为不熟悉,暂时照搬leetcode大佬题解 代码: class Solution { public int add(int a, int b) { while(b != 0) { // 当进位为 0 时跳出 int c = (a & b) << 1; // c = 进位 a ^= 阅读全文
posted @ 2021-02-18 22:29 zjcfrancis 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 思路: 1. 数学方法(求和公式) 设首项为x,项数为n,则末项为x+n-1,可得(2*x+n-1)*n=2*target 变形为x = (2*target-n*(n+1))/(2*n) 由求和易知,n < target /2 由题干正整数要求知,(n*(n+1))/2 < target, 2*ta 阅读全文
posted @ 2021-02-16 19:49 zjcfrancis 阅读(55) 评论(0) 推荐(0) 编辑
摘要: 思路: 1.暴力解法(哈希表) 遍历数组将元素存入哈希表,第二次遍历数组,对每一个元素在哈希表中寻找符合条件的另一个元素。 时间复杂度O(n),空间复杂度O(n) class Solution { public int[] twoSum(int[] nums, int target) { HashS 阅读全文
posted @ 2021-02-16 17:46 zjcfrancis 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 思路:双指针 指针A与指针B分别从链表A、B头开始走,走到结尾指向另一个链表头。 当两个指针相遇时,他们指向的节点就是两个链表的第一个公共节点。 原理:小学数学里的相遇问题,二指针在相同时间内走过的距离一样。 假设两个链表的非公共部分长度分别为La,Lb,公共部分长度为C。 相交时A指针走过距离为L 阅读全文
posted @ 2021-02-15 15:05 zjcfrancis 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 思路: 1. 暴力解法(字典)。 创建 ’a‘-’z‘ 的字典数组,第一次遍历字符串s,将 s 中字符存储到字典中,统计出现次数。 第二次遍历字符串s,从字典中获取次数,返回结果。 class Solution { public char firstUniqChar(String s) { if ( 阅读全文
posted @ 2021-02-13 02:35 zjcfrancis 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 思路:动态规划 dp[i]数组存储以nums[i]结尾的连续子数组最大和。 如果dp[i-1]<0,则dp[i-1]对dp[i]造成负贡献,dp[i]=nums[i]; 如果dp[i-1]≥0,则dp[i-1]对dp[i]造成贡献,dp[i]=dp[i-1]+nums[i]。 如果可以修改原数组,可 阅读全文
posted @ 2021-02-12 19:14 zjcfrancis 阅读(34) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 18 下一页