trick
文章平均质量分 55
Lzed
我好菜啊
展开
-
Leetcode 268 - Missing Number(等差数列 or 位运算)
题意给一个大小为n的数组,里面的元素为[0, n]中缺了一个数字,求缺的那个数字。要求:O(n)O(n)时间。O(1)O(1)空间。思路算法1如果数组包含[1, n]那么它的和为n(n+1)2\frac{n(n+1)}{2}。那么我们现在只需要对数组求和,两个相减,得到的就是缺失的那个数字了。算法2利用异或。我们知道^为:1 ^ 1 = 0, 0 ^ 1 = 1。那么,就可以得到这样两个结论:原创 2017-02-16 12:39:03 · 280 阅读 · 0 评论 -
Leetcode 54 - Spiral Matrix(螺旋打印矩阵)
题意将一个矩阵螺旋打印出来。思路算法1一个需要记录很多变量的思路。首先,我们要确定走的方向是up还是down还是right还是left。然后,确定走的方向后,我们再确定每次要走多少步,分别用rs和cs来表示。当我们在最外围的时候,rs和cs都不变,但是当我们第三次转向及以后的过程中,rs和cs每次都要-1了。虽然变量很多但是想清楚了再写一遍能A。算法2直接模拟螺旋形的过程:我们分别用u, r, d,原创 2017-02-19 17:42:23 · 190 阅读 · 0 评论 -
Leetcode 448 - Find All Numbers Disappeared in an Array (Array)
题意给一个大小为n的数组a,数组内的元素范围为[1, n]。已知数组内有些元素出现了两次或1次,求数组内没有出现的元素。要求:O(n)O(n)时间无额外空间。保存结果的那个vector不算额外空间。思路非常trick的一道题啊。O(n)O(n)的时间就排除了排序,虽然计数排序可以,但是好像会用额外空间?然后无额外空间的话,我们只能利用现有空间了。那么,假如我们可以用额外空间的话,那么一个比较原创 2017-02-14 21:46:52 · 180 阅读 · 0 评论 -
Leetcode 442 - Find All Duplicates in an Array (array)
题意同448,但是要求找出出现了两次的元素。思路算法1还是特别trick的一道题,但是既然写了448,我们大致就可以围绕那个方向了。我们还是假设x出现了,我们另a[abs(x) - 1]变为负数,代表x出现了一次。但是如果x出现了两次呢?要是我们再取一次反的话,就和没有出现的没有区别了。然后我的想法是如果y = a[abs(x) - 1]本身已经为负数了,说明已经出现了一次,将y减小n即可。如果遇到原创 2017-02-14 23:31:00 · 177 阅读 · 0 评论