枚举遍历
会飞的蟋蟀
学习中!!
展开
-
LeetCode 18. 4Sum
题解这个4sum的题其实是2sum,3sum的集大成者。其实说白了这种Ksum的题目就是只能靠遍历这种做法,枚举 所有的可能,但是这个枚举还是要点技巧,规避一些多余的计算。Codeclass Solution { public List<List<Integer>> fourSum(int[] nums, int target) { ...原创 2018-09-14 16:23:06 · 111 阅读 · 0 评论 -
LeetCode 454. 4Sum II
题解4sum变种,本质还是枚举,但是4个数组遍历要O(n^4),有咩有办法减少时间呢? 空间换时间吧。4组两两分着遍历,将其中两组的和用Map记录下来,另外两组求和后在Map中 找到负和就可以了。ps: java.xxx.map getOrDefault(object,v),寻找键值若无返回缺省的v。Codeclass Solution { public int f...原创 2018-09-14 16:32:30 · 81 阅读 · 0 评论 -
LeetCode 560. Subarray Sum Equals K
题解看到连续子序列和,必然想到前缀和。但是光有前缀和这题还做不了,如何使得和为目标数目呢?此题和前面做过的一道4SUM有点像,关键还是用map来存储便于查询。设想 map[ sum ] 表示前缀和为sum的数量,那么当我们累计算得当前位置的和为sum时,我们考察 map[ sum - k ] 的数量,这就是一份使得 目标数k 成立的答案。看代码,很巧。Codeclass Solut...原创 2018-10-01 12:50:20 · 154 阅读 · 0 评论 -
LeetCode 39. Combination Sum
题解这种求sum的题目核心思路就是遍历,没其他的东西。这题就是个dfs,注意回避重复(用序号开始)。ps: 看别人答案,函数上套那么多变量真是看得好难受。。。Codeclass Solution {public: vector<vector<int>> ret; vector<int> cot; int cur_sum; ...原创 2018-09-26 10:39:30 · 84 阅读 · 0 评论 -
LeetCode 22. Generate Parentheses
题解这题很巧,虽然还是个dfs。用两个变量n,m记录待放入的左右括号,放一个左则n-1,m+1,放一个右m-1,如此反复可得。Codeclass Solution {public: vector<string> generateParenthesis(int n) { vector<string> res; dfs(res...原创 2018-09-26 11:10:26 · 80 阅读 · 0 评论 -
LeetCode 48. Rotate Image
题解这题只要有点分解的意识就好了。旋转矩阵其实就是在按照顺时针顺序依次swap一行/列,如下图。每完成一个 口字再往内部走就是个更小的 口字。 4 - - - |3 | | 1 | | | - - - ...原创 2018-09-28 11:54:19 · 94 阅读 · 0 评论 -
LeetCode 78. Subsets && 90. Subsets II
题解也是两题一起写。第二问的差别在于是否有重复数字。这种求组合的,思路大体有三种:dfs,迭代,位操作。dfs不说了很熟悉,我用位操作搞定了第一问,这里关注一下迭代。我叙述一下迭代的过程,例如对{1,2,3},先预设返回值res为{{}}。遍历原数组,对每个数字,依次取得现有返回值res内所有组,加上此数字,再加回res。第一次:{{},{1}}第二次:{{},{1},{2},...原创 2018-10-09 11:36:40 · 150 阅读 · 0 评论 -
LeetCode 54. Spiral Matrix && 59. Spiral Matrix II
题解螺旋遍历矩阵大总结,给出一个优雅清晰的解法。大概思路是模拟移动方向,计算xy位置。比如n*m的矩阵,按右下左上的顺序,依次移动的步数是{ m, n-1 , m-1 , n-2, …, 0 } 直到遇到第一个0。其中左右的步数 { m, m-1 , m-2 … }上下的步数 { n-1, n-2, n-3, … }所以可以用个 step[2] = {m,n-1} 来记录剩余步数每...原创 2018-10-25 11:49:07 · 117 阅读 · 0 评论 -
LeetCode 835. Image Overlap
题解这题暴力遍历也行,枚举起始点就好。但是暴力法做了太多无用计算,其实我们只关心有1的位置。那么我们可以把有1的位置信息提取出来,然后比较当这两组的1碰撞在一起时候的总数即可。CodeO(n^2+AB)int largestOverlap(vector<vector<int>>& A, vector<vector<int>>&a...原创 2018-10-24 10:40:02 · 424 阅读 · 0 评论