leetcode 部分题解
Anxdada
多读书多看报, 少吃零食多睡觉
展开
-
LeetCode 124 Binary Tree Maximum Path Sum
传送门题意: 跟定一颗带点权二叉树, 问其任意一条路径的最大值是多少.(路径, 任意一点出发和结束的路径)思路: 其实就两种情况, 一是左右子树加上本身结点构成一条路, 二是将自己和左右子树更优的连接起传给父亲结点成路. 所有的情况就是这两种情况的综合,所以按照这个写就行了.AC Code/** * Definition for a binary tree node. * struct...原创 2019-04-19 01:46:20 · 187 阅读 · 0 评论 -
LeetCode 4 Median of Two Sorted Arrays【经典题目】
传送门题意: 给定两个有序数组, 要求在O(log(m+n))的复杂度之内求出合并后的中位数思路: 数据水,线性的也能过. 但是面试遇到就不一定能过了. 所以还是得想正解. 有个log,所以我们用二分来做, 具体做法就是每次算一算第k/2在哪里, 分别取出中间的来比较, 再按照大小关系递归算出,第k大在哪里, 每次递归减少k/2, 所以就是logk(k ≈ m + n), 所以复杂度合理!A...原创 2019-04-19 01:42:36 · 146 阅读 · 0 评论 -
LeetCode 342 4的幂
传送门题意: 就是判断一个数是不是4的幂思路: 2的幂已经写烂了, 4的幂的话也是在2的幂的基础上考虑的, 首先要保证是2的幂,然后观察4的幂的性质, 发现2进制的1一定在奇数位上, 那么我们需要一个用来验证奇数位上1的数字, 那就是0x55555555, 因为0x5 = 0101, 所以可以验证, 同理类似的题目都是这样做.AC Codeclass Solution {public:...原创 2019-04-18 23:50:50 · 252 阅读 · 0 评论 -
LeetCode 137 只出现了一次的数组||
传送门题意: 只有一个数字出现了一次, 其余数字都出现了三次. 问一次的那个数字是多少.思路: 相信2次的已经做烂了, 那么这道改编的了?一个二进制位只能表示0或者1。也就是天生可以记录一个数出现了一次还是两次。x ^ 0 = x;x ^ x = 0;要记录出现3次,需要两个二进制位。那么上面单独的x就不行了。我们需要两个变量,每个变量取一位:ab ^ 00 = ab;ab ^ a...原创 2019-04-18 21:35:17 · 157 阅读 · 0 评论 -
LeetCode 560 Subarray Sum Equals K【前缀和】
传送门题意: 有多少个连续子序列和为给定的k,思路: 连续, 就要想到前缀和, 所以我们利用前缀和的性质, 相减等于中间的和, 那么直接记录每个前缀的次数, 然后累加即可, 注意这类问题 0 这个数都是会作为默认点加的! 不要忘了,想想也是对的AC Codeclass Solution {public: int subarraySum(vector<int>&...原创 2019-04-21 23:08:09 · 418 阅读 · 0 评论 -
LeetCode 1,167, 15, 18 (2, 3, 4)数之和相关问题
传送门1这类题都是给定个类似 a + b + … = x, 问有方案数. 我们对于这种都用拆分的思想, 然后用小的去解决大的, 首先我们说2 sum.我们对n个数先排序, 然后两个指针, 一个开头,一个结尾, 然后往中间动, 如果x - b > a (b是后面的指针指的值, a是前面的指针指的值), 很明显如果再让j(后面的指针)动, 那么x - b会越大, 所以要让i(前面的指针)动,...原创 2019-04-21 22:46:34 · 182 阅读 · 0 评论 -
LeetCode 995 Minimum Number of K Consecutive Bit Flips【思维】
传送门题意: 给定一个长度为n的01数组, 每次可以将连续的k位翻转(o -> 1, 1 - > 0), 问能否将整个数字变成全1,能的话最少翻转多少次.思路: 很明显可以分析出的是, 一但遇到0了,那么一定要翻转, 并且以后都不能再翻转它了, 也就是跟着翻转下去, 所以一个很暴力的想法就出来, 直接每次暴力翻转连续的k位, 那么复杂度是接近于n^2的, 所以我们就不写了, 那么我...原创 2019-03-19 14:31:25 · 220 阅读 · 0 评论 -
leetcode 1015 Numbers With Repeated Digits
传送门题意: 给定一个N,求1 - N中,输出至少有一位数字是重复的数字的个数.思路: 很明显, 这道题要用数位dp, 考虑两点, 一是前导零的影响, 二是记录的应该是每一位的次数, 而不能是简单的标记和清空标记, 比如101 和 110. 所以状态想好为dp[i][j][k] 表示起始位i, 当前位j, 是否已经有重复位数k(0 or 1) , 然后做记忆化搜索就行, 没啥坑点.AC Co...原创 2019-03-18 20:40:13 · 582 阅读 · 0 评论 -
LeetCode 834 Sum of Distances in Tree
传送门题意: 给定一棵树, 输出每个点到其他点的距离之和.思路: 首先我们先dfs一遍, 存下每个点的子节点数(包括自己), 和一个值称dp, dp[u] 表示u的所有子节点到u的距离之和, 那么很容易也可以在第一次dfs中维护, 那么此时dp[0] (假设0是根节点), 就是0的答案, 那么其他的答案了, 实际上可以通过父亲的ans来转移, 此时ans[0] = dp[0], 那么假设0的字...原创 2019-03-19 15:04:46 · 271 阅读 · 0 评论 -
LeetCode 810 Chalkboard XOR Game【思维】
传送门题意: 给定n个数, 两个人轮流上去删除一个数字, 如果在某个人删除后, 剩下的数字异或等于0,那么这个人就输了, Alice 先手, 如果它能赢return TRUE.思路: 考思维, 首先全部数字异或等于0需要二进制的每一位上1出现偶数次, 那么如果刚开始就异或等于0,Alice肯定就赢了嘛, 否则如果剩下的数字是偶数Alice也一定能赢, 因为每次删除一个数字后剩下的数量一定是奇数...原创 2019-03-19 14:45:03 · 242 阅读 · 0 评论 -
LeetCode 793 Preimage Size of Factorial Zeroes Function【思维】
传送门题意: 给定一个x! 后零的个数k(<1e9), 问满足x的数字有多少个.思路: 很好的一道题, 我们一步步解决.1: 如何求x的阶乘末尾0的个数?10进制中只有2和5相乘才会得到10,也就是每有一对2和5,就多一个末尾的0而阶乘又是从1开始乘到x,所以2的个数总是比5多,那么问题转化为求x!中有多少个5作为因子公式为 k = x/5 + x/5^2 + x / 5^3 +...原创 2019-03-19 14:36:14 · 229 阅读 · 0 评论 -
LeetCode #4 寻找两个有序数组的中位数
传送门题意: 给定两个有序数组, 求中位数思路: 中位数实际上就是找中间那最多两个数, 然后两个数组又是有序的, 所以可以转换成求两个有序数组合并后的第k大问题, 所以我们需要有一个函数求 对于两个有序数组求第k大, 那么如何最快的求第k大了,很明显我们在两个数组中同时各取一半的数字(k/2) , 如果第一个数组的这位置(起始位+k/2-1)的数字比第二个的小, 那么说明这第k大肯定是不在第一...原创 2019-08-15 14:20:24 · 652 阅读 · 0 评论