摘要:
原题地址最直观的想法就是手动模拟一下,找找坐标在旋转时的规律为了方便实现,可以一层一层地旋转矩阵:先旋转最外层边框,然后再旋转次外层边框...以此类推在网上看到一种极其残暴的做法,只需要2次翻转1. 沿左下-右上对角线对称翻转2. 上下翻转还有其他变种,但基本思路都是这样,两次翻转即可搞定很神奇,以... 阅读全文
posted @ 2015-01-25 19:30
李舜阳
阅读(413)
评论(0)
推荐(0)
摘要:
原题地址非常经典的一道题。可以转换成求最大连续和做,但是有更简单的方法。基于一个数学定理:如果一个数组的总和非负,那么一定可以找到一个起始位置,从他开始绕数组一圈,累加和一直都是非负的(证明貌似不难,以后有时间再补)有了这个定理,判断到底是否存在这样的解非常容易,只需要把全部的油耗情况计算出来看看是... 阅读全文
posted @ 2015-01-25 17:00
李舜阳
阅读(4208)
评论(0)
推荐(1)
摘要:
原题地址遍历所有数字,统计每一位出现的次数,模3即为只出现一次的数字在那一位的情况。代码: 1 int singleNumber(int A[], int n) { 2 int count[32] = {0}; 3 4 for (int i = 0; i >= 1; 8 } 9 ... 阅读全文
posted @ 2015-01-25 16:43
李舜阳
阅读(173)
评论(0)
推荐(0)
摘要:
原题地址用栈保存化简后的路径。把原始路径根据"/"切分成若干小段,然后依次遍历若当前小段是"..",弹栈若当前小段是".",什么也不做否则,入栈代码: 1 string simplifyPath(string path) { 2 vector buffer; 3 char *tok = NU... 阅读全文
posted @ 2015-01-25 16:31
李舜阳
阅读(162)
评论(0)
推荐(0)
摘要:
原题地址DFS,跟求子集合的方法类似,对于任意一个元素,要么选,要么不选。代码: 1 vector > res; 2 3 void solve(vector ans, int n, int curr, int left) { 4 if (left == 0) 5 res.push_ba... 阅读全文
posted @ 2015-01-25 15:36
李舜阳
阅读(124)
评论(0)
推荐(0)
摘要:
原题地址二进制码 -> 格雷码:从最右边起,依次与左边相邻位异或,最左边一位不变。例如:二进制: 1 0 0 1 1 1 0 |\|\|\|\|\|\| 格雷码: 1 1 0 1 0 0 1从二进制到格雷码有一个残暴公式: a ^ (a 二进制码:从左边第二位开始,依次与左边相邻已经解... 阅读全文
posted @ 2015-01-25 15:16
李舜阳
阅读(135)
评论(0)
推荐(0)
摘要:
原题地址《Cracking the Code》一书中出现过这道题,那里面提到了多种解法,这里用最简单的枚举法。DFS枚举,令leftRemain表示当前还剩下几个"("可用,rightRemain表示当前还剩下几个")"可用。如果leftRemain > 0,那么总可以放一个"("如果leftRem... 阅读全文
posted @ 2015-01-25 13:57
李舜阳
阅读(172)
评论(0)
推荐(0)
摘要:
原题地址很有意思的一道题,二分搜索求极值。题目中已经说明num[i] != num[i+1],即相邻元素不可能相等,所以相邻元素间的大小关系要么是大于,要么是小于,这就是二分搜索的判断条件。假设左边界是l,右边界是r,中点m=(l+r)/2如果num[m]比左右两边都大,那么num[m]就已经是极值... 阅读全文
posted @ 2015-01-25 13:40
李舜阳
阅读(177)
评论(0)
推荐(0)

浙公网安备 33010602011771号