- 博客(47)
- 资源 (1)
- 收藏
- 关注
原创 [leetcode] Combination Sum IV
思路:记忆化搜索,定义函数查找以index开始,值为target的个数,顺便对nums排序减少不必要的搜索。代码如下:class Solution {public: int combinationSum4(vector& nums, int target) { int result = 0; if(nums.empty() || target ==
2016-07-26 01:34:19 399
原创 [leetcode] Single Number III
同Single Number,异或后按照得到的结果中bit位为1的将数组分为两组,结果必然各存在于这两组中,分别异或得到结果。代码如下:vector singleNumber(vector& nums) { int tmp = 0; vector result(2, 0); for(auto num : nums) { t
2016-03-21 15:01:48 298
原创 [leetcode] Word Pattern
注意一一对应即可:class Solution {public: bool wordPattern(string pattern, string str) { int i = -1, pos = 0; unordered_map mp; unordered_set st; while(++i < pattern.leng
2016-03-19 00:15:05 358
原创 [leetcode] Self Crossing
class Solution {public: bool isSelfCrossing(vector& x) { /*solution 1: only in three cases when cross /* i-2 case 1 : i-1┌─┐ └─┼─
2016-03-18 15:13:38 300
原创 [leetcode] Invert Binary Tree
和最近比较火的一条Twitter相关,题目本身其实并不难...递归和非递归代码如下:/*if(!root) return root; TreeNode* lf = root->left; root->left = invertTree(root->right); root->right = invertTree(lf);
2015-06-14 15:18:48 396
原创 [leetcode] Maximal Square
动态规划,dp[i][j]代表以i,j为右下角的正方形的最长边长。代码如下:int maximalSquare(vector>& matrix) { int result = 0; if(matrix.empty()) return result; const int n = matrix.size();
2015-06-03 16:40:36 1182
原创 [leetcode] Combination Sum III
简单题,和前面两个类似。代码如下:class Solution {public: vector> combinationSum3(int k, int n) { vector > result; vector num; dfs(k, n, result, num, 1); return result; }pri
2015-06-03 15:49:24 1101
原创 [leetcode] House Robber II
和I类似,II变成了环形,即首尾只能取一个。调用两次即可。代码如下:int rob(vector& nums) { if(nums.empty()) return 0; if(nums.size() == 1) return nums[0]; int val = *prev(nums.end());
2015-05-23 18:40:53 308
原创 [leetcode] Add and Search Word - Data structure design
字典树,代码如下:class TrieNode {public: // Initialize your data structure here. TrieNode() { for(int i = 0; i < 26; ++i) next[i] = NULL; end = false; } void ins
2015-05-23 17:46:31 424
原创 [leetcode] Word Search
dfs,代码如下:class Solution {public: bool exist(vector > &board, string word) { const int row = board.size(); const int column = board[0].size(); vector > visited(row, vecto
2015-05-23 17:28:29 351
原创 [leetcode] Word Search II
直接用word search暴力果断超时,根据提示可对words先构建字典树,然后dfs。代码如下:class TrieNode {public: // Initialize your data structure here. TrieNode() { for(int i = 0; i < 26; ++i) next[i] = NULL
2015-05-23 17:27:48 780
原创 [leetcode] Course Schedule II
和Course Schedule类似,记录下结果即可。代码如下:vector findOrder(int numCourses, vector>& prerequisites) { vector result; vector into(numCourses, 0); for(int i = 0; i < prerequisites.size();
2015-05-15 14:41:10 289
原创 [leetcode] Implement Trie (Prefix Tree)
实现字典树基本功能,包括查找key和前缀。代码如下:class TrieNode {public: // Initialize your data structure here. TrieNode() { for(int i = 0; i < 26; ++i) next[i] = NULL; end = false;
2015-05-08 13:59:16 268
原创 [leetcode] Reverse Linked List
链表简单题,遍历头插法即可。代码如下:ListNode* reverseList(ListNode* head) { if(!head) return head; ListNode dummy(-1); dummy.next = head; ListNode *cur = head; Lis
2015-05-07 14:56:48 293
原创 [leetcode] Course Schedule
图算法,判断有向图是否存在回路。拓扑排序即可,代码如下:bool canFinish(int numCourses, vector>& prerequisites) { vector into(numCourses, 0); for(int i = 0; i < prerequisites.size(); ++i) into[prereq
2015-05-07 14:52:21 700
原创 [leetcode] Isomorphic Strings
简单题,map记录下即可~代码如下:bool isIsomorphic(string s, string t) { if(s.length() != t.length()) return false; unordered_map mp1; unordered_map mp2; for(int i = 0;
2015-04-30 15:29:48 425
原创 [leetcode] Happy Number
简单题,模拟并记录即可~代码如下:bool isHappy(int n) { unordered_set appear; while(n != 1){ appear.insert(n); int tmp = n; n = 0; while(tmp){
2015-04-22 11:01:31 290
原创 [leetcode] Bitwise AND of Numbers Range
简单题,当m和n不相等时,即区间内必存在奇偶数,故低位AND后取0,故结果为m和n从高位开始取相等的那些位得到的值。代码如下:int rangeBitwiseAnd(int m, int n) { int p = 0; while(m != n && m != 0){ ++p; m >>= 1;
2015-04-20 21:47:14 342
原创 [leetcode] Number of Islands
BFS或DFS,利用grid数组来标记是否访问。代码如下:int numIslands(vector> &grid) { if(grid.empty()) return 0; const int m = grid.size(); const int n = grid[0].size(); int dir[4
2015-04-14 16:56:34 305
原创 [leetcode] Binary Tree Right Side View
dfs,记录已经访问到的层数即可。代码如下:vector rightSideView(TreeNode *root) { vector result; int curLevel = 0, level = -1; dfs(result, curLevel, level, root); return result; }
2015-04-07 22:09:32 371
原创 [leetcode] House Robber
简单题,代码如下:int rob(vector &num) { if(num.empty()) return 0; int pre = 0, cur = num[0]; int result = cur; for(int i = 1; i < num.size(); ++i){ re
2015-04-07 22:07:30 258
原创 砝码分块全称重问题
问题描述:一个M重的砝码,最少分成N块,使得所有1-M重的物品都可以用这N块砝码称出。分析:1、很容易想到二进制的方法,即每一块可以取也可以不取,即0和1,分类即1+2+4+...+2^(N-2)+X=M。 证明:由二进制可知1-(2^(N-1)-1)都可以称出,设现在需要称出2^(N-1)-1+Y的重量(Y可由前N-1个砝码中去除重量和为X-Y的砝码,加上第N个砝码后重量为
2015-03-03 10:36:01 500
原创 [leetcode] Department Top Three Salaries
简单连接统计~~select d.Name as Department,ee.Name as Emplyee,ee.Salary as Salaryfrom Department d,( select * from Employee e where (select count(distinct Salary) from Employee where
2015-01-26 17:36:54 1162
原创 [leetcode] Consecutive Numbers
用用户变量记录出现次数即可~select distinct NUM from( select NUM, @count := if(@prevNum = NUM, @count + 1, 1) as cnt, @prevNum := NUM from Logs, (select @prevNum := NULL) pn, (select @count := 0) ct o
2015-01-22 16:28:04 1562
原创 [leetcode] Largest Number
bool cmp(const int &a, const int &b){ string sa = to_string(a); string sb = to_string(b); return sa + sb > sb + sa;}class Solution {public: string largestNumber(vector &num) {
2015-01-21 13:11:34 362
原创 [leetcode] Dungeon Game
动态规划,代码如下:int calculateMinimumHP(vector > &dungeon) { const int m = dungeon.size(); const int n = dungeon[0].size(); int dp[m][n]; dp[m - 1][n - 1] = getMin(1 - dun
2015-01-09 15:21:54 633
原创 [leetcode] Fraction to Recurring Decimal
细节题,余数出现相同时即循环节。代码如下:string fractionToDecimal(int numerator, int denominator) { int flag = 1; long long lnum = numerator, lden = denominator; if(numerator < 0){ lnum =
2014-12-19 09:27:04 350
原创 [leetcode] Compare Version Numbers
细节题,代码如下:int compareVersion(string version1, string version2) { int index1 = 0, index2 = 0; while(index1 < version1.length() || index2 < version2.length()){ int temp1, te
2014-12-17 09:56:15 404
原创 [leetcode] Merge Intervals
细节题,代码如下: bool comp(const Interval &a, const Interval &b){ if(a.start == b.start) return a.end < b.end; return a.start < b.start;}class Solution {public: vector me
2014-11-13 13:51:45 306
转载 树状数组
树状数组是对一个数组改变某个元素和求和比较实用的数据结构。两中操作都是O(logn)。 在解题过程中,我们有时需要维护一个数组的前缀和S[i]=A[1]+A[2]+...+A[i]。 但是不难发现,如果我们修改了任意一个A[i],S[i]、S[i+1]...S[n]都会发生变化。 可以说,每次修改A[i]后,调整前缀和S[]在最坏情况下会需
2014-07-16 10:55:37 260
原创 [leetcode] Longest Valid Parentheses
用栈,并改变匹配的括号在s中的位置的值为‘0’。最后统计连续0的geshu
2014-07-04 17:34:37 308
原创 [leetcode] Minimum Window Substring
代码如下:class Solution {public: string minWindow(string S, string T) { unordered_map count; unordered_map found; int index = 0, minLen = INT_MAX; int num = 0;
2014-07-04 16:42:25 468
转载 拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。
2014-06-09 14:26:49 466
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人