自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Stephen Wong的专栏

让明天把今天记住 不是因为孤独 因为我们追求的专注 不管它起起伏伏

  • 博客(300)
  • 收藏
  • 关注

原创 LeetCode 210. Course Schedule II(拓扑排序-求有向图中是否存在环)

和LeetCode 207. Course Schedule(拓扑排序-求有向图中是否存在环)类似。注意到,在for (auto p: prerequistites)中特判了输入中可能出现的平行边或自环。代码:class Solution {public: vector findOrder(int numCourses, vector>& prerequis

2015-08-03 00:41:28 1166

原创 LeetCode 209. Minimum Size Subarray Sum (O(n)实现)

动态规划:len[i]: - 若存在begin使得sum(nums.begin()+begin, nums.begin()+i+1)>=s且sum(nums.begin()+begin-1, nums.begin()+i+1)- 反之,len[i] = len[i - 1] + 1;sum[i]: - 若存在上述begin, sum = sum(nums.begin()+beg

2015-08-02 18:12:14 817

原创 LeetCode 208. Implement Trie (Prefix Tree)

字典树。测试中有:aaaaaaaaaaa... 的输入,如果每个节点用定长数组存储孩子的话,那就是26^len的空间复杂度(len为输入的长度),内存会不够的。所以用map保存其孩子。代码:#include #include #include using namespace std;class TrieNode{public: // Initialize

2015-07-27 19:56:00 1087

原创 LeetCode 207. Course Schedule(拓扑排序-求有向图中是否存在环)

求有向图中是否有环。法一:拓扑排序用一个队列维护所有入度为0的节点,每次弹出一个节点v,查看从v可达的所有节点u;将u的入读减一,若u的入度此时为0, 则将u加入队列。在队列为空时,检查所有节点的入度,若所有节点入度都为0, 则存在这样的一个拓扑排序 —— 有向图中不存在环。

2015-07-27 17:10:35 3677

原创 LeetCode 206. Reverse Linked List(迭代和递归两种实现)

递归的代码比迭代的代码看起来更清爽一些,也是因为递归对行为进行了抽象吧。注意到,这是一个尾递归函数,一些编译器会将它优化为迭代,这样一方面,在代码层面保持了清晰的逻辑和可读性,一方面保持了代码的性能。代码:class Solution{public: ListNode* reverseList(ListNode* head) { // return iterat

2015-07-27 14:41:15 1798

原创 LeetCode 205. Isomorphic Strings

用一个哈希表,记录字母到字母间的映射即可。代码:class Solution{public: bool isIsomorphic(string s, string t) { for (size_t i = 0; i < s.size(); ++ i) { if (dict.find(s[i]) == dict.end())

2015-07-22 22:10:00 547

原创 LeetCode 204. Count Primes

LeetCode原题和维基百科都有解释用到的Sieve of Eratosthenes算法。 该算法可在O(nloglogn)时间内,求出小于n的所有质数;空间复杂度为O(n). 随着n的增大,当空间有限时,维基百科还提出了一种分段筛选(segmented sieve)方法,在时间复杂度不变的情况下,将空间复杂度降为O(n^0.5).下面代码实现了常规筛选(regular sieve)方法:cl

2015-07-22 14:39:46 699

原创 LeetCode 203. Remove Linked List Elements

代码:class Solution {public: ListNode* removeElements(ListNode* head, int val) { for ( ; head!=nullptr && head->val==val; head = head->next) {} for (auto cur = head; cur!=nullptr

2015-07-22 14:29:29 482

原创 LeetCode 202. Happy Number

非常巧,前后做了两次,写的代码思路、甚至是空行都是一模一样的...代码:class Solution {public: bool isHappy(int n) { if (int_set.find(n) != int_set.end()) { return false; } int_set.insert(n)

2015-06-22 09:01:33 816

原创 LeetCode 201. Bitwise AND of Numbers Range

可通过的代码:class Solution {public: int rangeBitwiseAnd(int m, int n) { int ret = 0; for (int i = 0; m!=0 && n!=0 && i>=1, m>>=1, i++) { ret += ((m%2!=0)&&m==n

2015-06-19 10:00:49 795

原创 LeetCode 200. Number of Islands

DFS遍历即可。

2015-06-17 14:14:47 648

原创 Django. No changes detected when "makemigrations"

在修改了models.py后,有些用户会喜欢用python manage.py makemigrations生成对应的py代码。但有时执行python manage.py makemigrations命令,会提示"No changes detected." 可能有用的解决方式如下:1. 直接使用python manage.py migrate.可能会先生成对应数据库的py代码,再自动执行这段代码,创建数据库表格 (我没有仔细去读文档 不清楚这条命令的逻辑)

2015-06-03 21:17:42 18989 5

原创 LeetCode 199. Binary Tree Right Side View

BFS, 注意要先对右节点调用BFS即可。

2015-05-30 15:43:07 973

原创 LeetCode 198. House Robber

动态规划,构造dp[n][2]数组,dp[i][0]: 在不取nums[i]的情况下,从nums[0, 1, ..., n]中能获得的最大值;dp[i][1]: 在取nums[i]的情况下,从nums[0], 1, ..., n]中能获得的最大值。注意到,max(dp[i][0], dp[i][1])表征了从nums[0, 1, ..., n]中获得的最大值。初始化:dp[0][0] = 0;dp[0][1] = nums[1].状态方程:dp[i][0] = max(dp[i-1][0

2015-05-30 15:40:40 864

原创 LeetCode 191. Number of 1 Bits

代码:class Solution {public: int hammingWeight(uint32_t n) { int one_cnt = 0; for (uint32_t mask = 1; mask != 0; mask <<= 1) { one_cnt += (n & mask) != 0

2015-05-04 13:41:28 671

原创 LeetCode 190. Reverse Bits

代码:class Solution {public: uint32_t reverseBits(uint32_t n) { uint32_t ret = 0; for (int i = 0; i < 32; ++ i) { ret |= (((n&(1<<i))!=0)? (1<<(31-i)): 0); }

2015-05-04 13:39:26 595

原创 LeetCode 189. Rotate Array

尽量用多种方法解题,至少有三种方法可以解决这个问题。

2015-04-13 11:16:05 659

原创 LeetCode 179. Largest Number

把数字转换成字符串,给这些字符串排个序,排出的序列即为拼接顺序。

2015-04-13 11:06:53 710

原创 LeetCode 172. Factorial Trailing Zeroes

求 n! 的计算结果 有几个后缀0.可以发现,一个5和一个2的乘积,可以获得一个0. 考虑10! : 10! = 362880 有两个后缀0. 这是因为这10个连乘数里,有5和10, 它们分解质因数后可以获得2个5.注:我们前面提到一个5和一个2的乘积,容易想到的,将这么多的连乘数分解质因数,2的数量是远大于5的数量的考虑25! : 这里的5, 10, 15, 20, 25可以分解出6个5, 所以25!应该有6个后缀0.

2015-04-13 10:59:39 802

原创 LeetCode 169. Majority Element

题意为在非空数组中有一个数出现次数大于 ceiling(num.size() >> 1), 那么可以进行如下模拟:任取数组中的两个不相同的数,将它们一起拿去,这样一次一次地拿,最后剩下的一个(或相同的几个)数,即为Majority Element.

2015-04-13 10:36:09 611

原创 foobar

>

2015-03-23 11:46:42 703

原创 LeetCode 165. Compare Version Numbers

看起来有点头疼,但弄清规则后还是比较容易的:1. 版本号当前数字不同,则进行比较,返回-1或12. 版本号当前数字相同,则比较后续的数字。如1.1比1.0大,但1.0和1是相同的;但但是1.0.1是比1大的。代码写好点也不算长:D

2015-03-11 18:56:10 890

原创 LeetCode 162. Find Peak Element

模拟题,遍历一遍即可。代码:class Solution {public: int findPeakElement(const vector &num) { if (num.size() == 1) { return 0; } for (int i = 0; i < num.size(); ++ i)

2015-03-11 18:39:42 551

原创 LeetCode 160. Intersection of Two Linked Lists

考虑有交集的两条链表A, B, 如题中的A:               a1 -> a2 ->                                        c1 -> c2 -> c3.B:    b1 -> b2 -> b3 ->发现有性质:AB不同串(a1a2和b1b2b3)的长度差 即为AB串的长度差。所以我们先求出AB串的长度差,再将较长的串移进相应

2015-03-03 20:29:51 788

原创 LeetCode 155. Min Stack

相较普通的栈,题目要求多实现一个操作getMin(): 获取栈中最小的元素   我们维护两个栈:普通栈s保存所有元素, 最小栈min_s保存s中的“曾出现过”的最小元素的递减序列。min_s.top()即为getMin()的返回值,标识普通栈s里的最小元素。考虑压栈 3 4 5 2 3 1, 它们有如下表现:push   3 4 5 2 3 1s          3

2015-02-24 10:56:34 1089 3

原创 LeetCode 171. Excel Sheet Column Number

相似题型:LeetCode 168. Excel Sheet Column Title代码:class Solution {public: int titleToNumber(string s) { int ret = 0; for (size_t i = 0; i < s.size(); ++ i) {

2015-02-24 10:42:36 1033

原创 LeetCode 168. Excel Sheet Column Title

相似题型:LeetCode 171. Excel Sheet Column Number代码:class Solution {public: string convertToTitle(int n) { string ret; while (n != 0) { ret.insert(ret.begin(), 'A' + (n-1)%26); n = (n-1) / 26; }

2015-02-24 10:41:36 1245

原创 LeetCode 154. Find Minimum in Rotated Sorted Array II

二分搜索,和LeetCode 153. Find Minimum in Rotated Sorted Array相似。只是在num[begin] == num[mid]时,需要binary_search(++ begin, end, num); 这时仅将begin移进一位,并没有进行二分查找。所以如测试用例为 num = {1, 1, 1, 1, 1, ..., 1}等特殊情况时,最坏情况

2015-02-24 00:05:14 1243

原创 LeetCode 153. Find Minimum in Rotated Sorted Array

二分查找。因为在旋转前的数组是排好序了的,所以当num[begin] > num[mid]时,表示我们要搜寻的最小数字在num[begin, ..., mid]之间;反之,num[begin] 例:考虑num = {5, 6, 7, 1, 2, 3, 4},begin = 0, end = 6, mid = 3num[begin] = 5 > num[m

2015-02-23 23:06:13 975

原创 LeetCode 152. Maximum Product Subarray

动态规划。dp[0][i]: A[0, ..., i-1]的maximum product subarray,dp[1][i]: A[0, ..., i-1)的minimum product subarray.初始化dp[0][0] = dp[1][0] = A[0].递推公式:dp[0][i] = max(dp[0][i-1]*A[i], dp[1][i-1]*A[i])

2015-02-23 19:19:27 845

原创 LeetCode 140. Word Break II (DP+DFS)

直接递归求解TLE(Time Limit Exceeded), 用vector<vector<string>> ret(s.size()+1)保存wordBreak的解MLE(Memory Limit Exceeded),采用DP+DFS通过测试。在LeetCode 139. Word Break的中,用dp[i]标识s.substr(0, i)是否可以由dict里的字符串组成;在此我们用dp[i]标识s.substr(0, i)的workBreak解的最后一个单词的集合。如输入["abcde

2015-02-23 10:39:42 3541 1

原创 LeetCode 139. Word Break

动态规划。dp[i] == true表示s.substr(0, i)可以由dict里的字符串组成;dp[0]初始化为true, dp[1, ..., s.size()]初始化为false.代码:class Solution {public: bool wordBreak(string s, unordered_set &dict) { vec

2015-02-19 22:28:25 952

原创 LeetCode 138. Copy List with Random Pointer

和LeetCode 133. Clone Graph一个意思,深层拷贝意味着,对a进行拷贝,获得b, 使得b的成员变量不仅值与a中对应的成员变量相等,同时它们指向不同的内存空间。维护一张map, 保存已创建好的结点即可。因为题目并不像clone graph一样,本体没有说明label唯一,所以应该用label和next组成的pair来作为map的key;但同时发现本题sample中的label都是唯一的,所以在代码1中,就直接用int label, 作为map的key了。

2015-02-17 13:20:10 764

原创 LeetCode 137. Single Number II

n-1个数字出现3次,1个数字出现1次。位运算,用cnt[32]记录每个位上,二进制'1'出现的次数。1) 假设一个数字7, 它出现3次,那么二进制0000 0000 0000 0000 0000 0000 0000 0111会出现三次,也就是第0, 1, 2位上的二进制'1'会出现3次,那么我们将它%3, 得到的余数为0. 2) 假设一个数字15, 它只出现1次,那么二进

2015-02-17 11:14:50 740

原创 LeetCode 136. Single Number

只有一个数出现基数次(1次),其他数字出现欧数次(2次)异或运算即可。代码:class Solution {public: int singleNumber(int A[], int n) { int ret = 0; for (int i = 0; i < n; ++ i) { ret ^= A[i];

2015-02-17 11:05:41 798

原创 LeetCode 134. Gas Station

初始化起始车站begin和抵达车站end为0, 初始化记录车上还剩的汽油gas_in_car为0,迭代gas.size()次。每次迭代:计算当前所在车站gas[now] - gas[cost], 将差值加入gas_in_car中1) 当gas_in_car小于0时,说明无法从begin抵达end, 将begin前移(-- begin), 继续迭代2) 当gas_in_car大于0时,说明可以从begin抵达end, 将end后移(++ end), 继续迭代迭代gas.size()次后,无论怎样,我

2015-02-16 23:20:54 782

原创 LeetCode 133. Clone Graph

题意为克隆整张图,返回形参“逻辑相等”的结点可通过测试。代码:class Solution {public: UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { if (node == NULL) { return NULL; } aut

2015-02-15 18:48:28 717

原创 LeetCode 132. Palindrome Partitioning II

动态规划。1. palindrome[i][j]==true, 表示s[i, ..., j] (i将其初始化为false. 有动态方程:if (s[i]==s[j] && (j-i<=2 || palindrome[i+1][j-1])){ palindrome[i][j] = true;}2. dp[i]标志子串s.substr(i)的minCuts将其初始

2015-02-15 13:15:05 699

原创 LeetCode 131. Palindrome Partitioning

递归切分回文串即可。代码:class Solution {public: vector> partition(string s) { vector cur; recurse(s, cur); return ret; }private: void recurse(const string& s, vector& cur

2015-02-15 11:26:24 576

原创 LeetCode 130. Surrounded Regions

逆向思维,从边缘的O出发(上下左右四排的O),进行DFS, 将这些'O'可达的所有点'O'都标记为'Z'(包括它们自身也标记为O), 这些'Z'最终都可以保持为'O'不变,而其他点应该都变成'X'. 这样就可以了。

2015-02-15 11:01:12 736

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除