学习笔记
文章平均质量分 54
学习过程中,比较自己和其他优秀答案的解法,记录下来,不断反思。
Code_YuanH
这个作者很懒,什么都没留下…
展开
-
格雷编码
格雷编码格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。格雷编码序列必须以 0 开头。题目解释:给定编码总位数为 n 的格雷编码序列,其长度为 2n。当 n = 0 时,长度为 20 = 1。因此,当 n = 0 时,其格雷编码序列为 [0]。举例说明:n = 0时,0n = 1时,0 1n = 2时,00 01 11 10n = 3时,000 00原创 2021-05-20 19:11:13 · 696 阅读 · 0 评论 -
形成两个异或相等数组的三元组数目(数学、前缀和)
形成两个异或相等数组的三元组数目 | 数学 | 数组前缀和给你一个整数数组 arr 。现需要从数组中取三个下标 i、j 和 k ,其中 (0 <= i < j <= k < arr.length) 。a 和 b 定义如下:a = arr[i] ^ arr[i + 1] ^ … ^ arr[j - 1]b = arr[j] ^ arr[j + 1] ^ … ^ arr[k]注意:^ 表示 按位异或 操作。请返回能够令 a == b 成立的三元组 (i, j , k)原创 2021-05-18 16:46:51 · 201 阅读 · 0 评论 -
停在原地的方案数(动态规划)
停在原地的方案数 | 动态规划有一个长度为 arrLen 的数组,开始有一个指针在索引 0 处。每一步操作中,你可以将指针向左或向右移动 1 步,或者停在原地(指针不能被移动到数组范围外)。给你两个整数 steps 和 arrLen ,请你计算并返回:在恰好执行 steps 次操作以后,指针仍然指向索引 0 处的方案数。由于答案可能会很大,请返回方案数 模 10^9 + 7 后的结果。链接:https://leetcode-cn.com/problems/number-of-ways-to-st原创 2021-05-14 22:54:19 · 174 阅读 · 0 评论 -
子数组异或查询(前缀和)
子数组异或查询题目描述请见 1310. 子数组异或查询 - 力扣(LeetCode) (leetcode-cn.com)暴力穷举法:遍历queries 数组,根据二维书值确定左右边界,然后求出异或值,返回即可。class Solution { public int[] xorQueries(int[] arr, int[][] queries) { int[] answer = new int[queries.length]; for(int i =原创 2021-05-12 15:54:59 · 397 阅读 · 0 评论 -
制作 m 束花所需的最少天数 (二分搜索)
制作 m 束花所需的最少天数 | 二分搜索给你一个整数数组 bloomDay,以及两个整数 m 和 k 。现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 .题目分析:如果花园中花的数量小于 m * k (即拥有量小于需求量),那么不符合题意;为了满足题意,需要确保当前天数时,花应当原创 2021-05-09 13:24:25 · 113 阅读 · 0 评论 -
平方数之和(双指针、数学)
平方数之和(双指针 | 数学)给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a² + b² = c 。使用 sqrt函数class Solution { public boolean judgeSquareSum(int c) { for (long a = 0; a * a <= c; a++) {//如果不用long a*a会溢出 double b = Math.sqrt(c - a * a);原创 2021-04-28 18:56:33 · 475 阅读 · 0 评论 -
最大整除子集
最大整除子集详情请见 leetcode 最大整除子集我的解法:遍历返回(审题不严,未返回最大的整除子集)分析题目可以看出,对数组进行从小到大排序,对于数组中的任意两个元素:假设 i < j ,那么只需要 nums [ i ] | nums [ j ] 即可,就为一个整除子集。如果不含有这种情况,那么整出子集必定只含有一个元素,故任意即可。class Solution { public List<Integer> largestDivisibleSubset原创 2021-04-27 17:32:35 · 415 阅读 · 0 评论 -
组合总和Ⅳ(动态规划)
组合总和Ⅳ | 动态规划题目描述:给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。(题目数据保证答案符合 32 位整数范围)详情请见 leetcode 377.组合总和Ⅳ动态规划:首先我们不妨设 i (1 ≤ i ≤ target),那么如果数组中存在一个排列,使得排列和为 i ;那么我们去掉这个排列的最后一个数字num,相当于 i 的排列组合可能为 (i-num)的排列组合可能;由上述分原创 2021-04-26 20:25:09 · 284 阅读 · 0 评论 -
在 D 天内送达包裹的能力
在 D 天内送达包裹的能力 | 贪心算法 | 二分查找判定具体题目参考leetcode 1011.在D天内送达包裹的能力我的解法:根据题目可以看出,最低运载能力肯定 ≥ 这批包裹中重量最大的,因此可以先找出重量最大的包裹;然后从第一个包裹开始计算,如果加上下一个包裹的重量大于最低运载能力,那么天数+1,下一个包裹按照上述方法计算;如果不大于,那么继续累加。最后判断天数是否超过所需天数即可。class Solution { public int shipWithinDays(int[原创 2021-04-26 16:51:52 · 135 阅读 · 0 评论 -
解码方法( dfs | dp )
解码方法详情参见leetcode 91.解码方法我的解法:dfs深度遍历优先搜索,遇到错误情况返回。错误情况包含以下三种:单个为0或者两个字符以0为前导;两个字符的值大于26 即不为A~Z;整个字符转含有前导0。但是因为字符串长度为 1 ≤ length ≤ 1000,采用dfs的开销太大,超出时间限制,故不可取。代码如下:class Solution {public: int answer=0;//计数 string str;//全局存储 vo原创 2021-04-22 13:29:57 · 177 阅读 · 0 评论 -
大整数乘法(分治法)
大整数乘法(分治法)题目描述:设X和Y都是n位的十进制整数,计算它们的乘积X*Y。如果按照我们日常的计算方法,应该就是将两个数逐位相乘,最后加起来得到最终的结果,时间复杂度为O(n2);因此我们思考,能不能采用分治法来降低时间复杂度。我们将X和Y按照上述方式划分,故可得:**XY = ac×10n + (ad + bc)×10n/2 + bd; **但是经过分析可以看出,这样处理并没有降低时间复杂度,那么我们是否可以减少乘法计算来降低O?XY = ac×10n + ((a-b)(d-c)原创 2021-04-18 15:05:32 · 1824 阅读 · 0 评论 -
数组中删除重复项和移除元素(双指针)
数组中删除重复项和移除元素删除重复项我的解法int removeDuplicates(vector<int>& nums) { vector<int>::iterator itor; for (int i = 0; i < nums.size(); i++) { int j = i + 1; for (itor = nums.begin()+j; itor != nums.end(); itor++) { if (*itor == nums.a原创 2021-04-18 12:57:40 · 135 阅读 · 0 评论 -
丑数( 数学思想 | 动态规划 | 二分搜索 )
丑数(数学、动态规划、二分搜索)丑数Ⅰ给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。(1通常被认为丑数)输入:n = 8输出:true解释:8 = 2 × 2 × 2我的解法:根据题目的描述可以得到下面结论,如果一个数为丑数,那么一定能够被2,3,5轮流整除,最后结果为1。class Solution {public: bool isUgly(int n) {原创 2021-04-12 17:56:30 · 414 阅读 · 0 评论 -
最长公共子序列(动态规划)
最长公共子序列(动态规划)给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列LCS(可以不连续)动态规划(dynamic programming)算法是解决多阶段决策过程最优化问题的一种常用方法,难度比较大,技巧性也很强。利用动态规划算法,可以优雅而高效地解决很多贪婪算法或分治算法不能解决的问题。题目分析分析最优解的结构:设序列X={x1,x2,…,xm}和Y={y1,y2,…,yn}的最长公共子序列为Z={z1,z2,…,zk}xm-1=原创 2021-04-07 21:09:19 · 283 阅读 · 0 评论