- 博客(303)
- 收藏
- 关注
原创 179. Largest Number LeetCode
题意:给出一堆的数字字符串,问把这些字符串连接起来能组成的最大数字是多少。 题解:排序,第一位字母按字典序降序,第一位字母相同的s1和s2,那就比较s1+s2 和 s2 + s1的大小来降序排列,然后按排好序的顺序连起来就是最大的数字。注意前导0的问题。class Solution {public: static bool cmp(int a,int b) { s
2016-03-17 23:03:22 387
原创 127. Word Ladder LeetCode
题意:给出一个开头单词,一个结尾单词,还有一个字典,单词之间之差一个字母的可以相互转换,问开头单词与字典里面的单词交换多少次能转换成结尾单词。 题解:很显然建边,然后BFS。但是很容易TLE或者MLE,所以要注意建边的姿势。class Solution {public: int ladderLength(string beginWord, string endWord, unordere
2016-03-17 23:01:08 324
原创 211. Add and Search Word - Data structure design LeetCode
题意:设计一种数据结构,能插入单词,然后查询单词,查询支持模糊查询,.代表一个任何字母。 题解:用trie树存,查找的时候遇到.就递归的去查。class TrieNode{public: bool isword; char var; TrieNode* children[26]; TrieNode() { var = 0;
2016-03-17 22:57:16 306
原创 98. Validate Binary Search Tree LeetCode
题意:检查一棵树是否是搜索二叉树。 题解:递归的判断root和l,r的关系就可以判断。class Solution {public: bool check(TreeNode* root,long long l,long long r) { if(root == NULL) return true; return l < root->val && r
2016-03-17 22:54:49 289
原创 210. Course Schedule II LeetCode
题意:和Course Schedule 是一样的题意,只不过这里要求出修课的顺序。 题解:还是拓扑排序。class Solution {public: vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) { vector<int> ans; bool g[
2016-03-17 22:52:19 269
原创 71. Simplify Path LeetCode
题意:给你一个linux路径,让你求出他的最终路径。 题解:用栈模拟。class Solution {public: string simplifyPath(string path) { stack<string> sta; int n = path.length(); for(int i = 0; i < n;) {
2016-03-17 22:50:34 276
原创 3. Longest Substring Without Repeating Characters LeetCode
题意:给出一个字符串,求最长的不含相同字母的连续子串。 题解:hash+两个指针,hash每个字母最近出现的位置。left指针指向不包含当前字母的最远处。答案是i - left + 1,不停的更新。class Solution {public: int lengthOfLongestSubstring(string s) { int n = s.length();
2016-03-17 22:48:59 203
原创 152. Maximum Product Subarray LeetCode
题意:给一个数组,求最大连续字段积。 题解:这个跟最大连续子段和是一个套路,不过这里需要维护最大连续字段和和最小连续子段和,因为他们之间是互相转换的。class Solution {public: int maxProduct(vector<int>& nums) { int n = nums.size(); if(n == 0) return 0;
2016-03-17 22:39:25 234
原创 304. Range Sum Query 2D - Immutable LeetCode
题意:给一个数字二维矩阵,求左上角(x1,y1)到右下角(x2,y2)的矩形的数字和。 题解:dp[i][j]表示0,0到i,j的矩阵数字之和。那么query的时候就容斥原理,query(x1,y1,x2,y2) = dp[x2][y2] - dp[x1][y2] - dp[x2][y1] + dp[x1][y1];class NumMatrix {public: vector<vect
2016-03-17 22:35:56 280
原创 54. Spiral Matrix LeetCode
题意:一个二维矩阵的值走之字形之后的值。 题解:模拟,很恶心。class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> ans; int n = matrix.size(); if(n == 0) return ans
2016-03-17 22:30:57 227
原创 2. Add Two Numbers LeetCode
题意:给两个链表,表示两个正整数,求两个正整数相加后的值。 题解:直接模拟。class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode *head = new ListNode(0); ListNode *ans = head;
2016-03-17 22:28:13 257
原创 143. Reorder List LeetCode
题意:给你一个链表,把链表从 L: L0→L1→…→Ln-1→Ln,变成L0→Ln→L1→Ln-1→L2→Ln-2→…。 题解:把链表的后一般翻转,然后两个链表按规则合并。class Solution {public: ListNode* reverseList(ListNode* head) { ListNode *pre = NULL; ListNod
2016-03-17 22:26:55 309
原创 79. Word Search LeetCode
题意:给一个存有字母的二维矩阵和一个单词,问单词是否可以是二维矩阵的一条路径上的字母组成的,路径移动方向是4个方向,上下左右。 题解:dfs即可。class Solution {public: int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}}; bool dfs(vector<vector<char>>& board, string word
2016-03-17 22:02:56 234
原创 61. Rotate List LeetCode
题意:给出一个链表,还有向右移动的步数k,问移动后的链表。 题解:k可能大于链表长度,所以%一下。然后问题转换成把前面n-k个元素放到链表后面。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : v
2016-03-17 22:00:07 252
原创 43. Multiply Strings LeetCode
题意:给两个只包含数字的字符串,求相乘的值。 题解:模拟高精度乘法。class Solution {public: string multiply(string num1, string num2) { int len1 = num1.length(); int len2 = num2.length(); string s(len1 + l
2016-03-17 21:46:42 280
原创 93. Restore IP Addresses LeetCode
题意:给出一段数字,加上3个点之后会变成ip段,求所有合法的ip段。 题解:dfs即可。class Solution {public: vector<string> ans; bool isvail(string s) { if(s.length() == 1 && s >= "0" && s <= "9") return true; if
2016-03-17 21:42:44 263
原创 150. Evaluate Reverse Polish Notation LeetCode
题意:逆波兰式求值。 题解:用栈模拟即可。class Solution {public: int evalRPN(vector<string>& tokens) { stack<int> sta; int n = tokens.size(); for(int i = 0; i < n; i++) {
2016-03-17 21:41:13 242
原创 221. Maximal Square LeetCode
题意:给你一个01矩阵,求最大的1矩阵面积。 题解:dp,dp[i][j]表示从0,0到i,j最大的矩形边长。转移: dp[i][j] = min(min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1class Solution {public: int maximalSquare(vector<vector<char>>& ma
2016-03-17 21:40:03 313
原创 18. 4Sum LeetCode
题意:给你一个数组,找出所有不重复的由4个数组成的集合,使得4个数组加和等于target。 题解:记得找a+b = target吗?对a进行hash然后找target - b,这里也hash,只不过是对a+b进行hash,然后找target - c - d。class Solution {public: vector<vector<int>> fourSum(vector<int>& n
2016-03-17 21:31:58 248
原创 227. Basic Calculator II LeetCode
题意:模拟一个计算器的+-*/,数字只会出现正整数。 题解:用栈模拟即可,代码恶心了点。class Solution {public: int calculate(string s) { stack<int> sta; char op = '+'; int ans = 0,tmp = 0; for(int i = 0; i
2016-03-17 21:14:53 321
原创 316. Remove Duplicate Letters LeetCode
题意:给出一个字符串,让你去掉一些,使得这个字符串的每个字符只出现一次,并且字典序最小。 题解:用count把每个字母出现的次数记录下来,然后遍历字符串,把当前字母的count-1,然后去判断当前答案最后那一位的count是不是0,不是的话再看如果把当前的放到前面是不是字典序更小,然后不停的往前找。class Solution {public: string removeDuplicat
2016-03-16 18:32:47 287
原创 148. Sort List LeetCode
题意:给一个链表排序。 题解:对链表快排?我选择归并,归并好写一些。class Solution {public: ListNode* getmid(ListNode* head) { ListNode* fast,*slow; fast = head,slow = head; while(fast->next != NULL &&
2016-03-16 18:26:45 170
原创 222. Count Complete Tree Nodes LeetCode
题意:求完全二叉树的节点数。 题解:先看看这课子树是不是满的,是满的返回2^h - 1个,否则递归求左右儿子的个数。class Solution {public: int countNodes(TreeNode* root) { if(root == NULL) return 0; int l = 0,r = 0; TreeNode *le
2016-03-16 18:24:46 198
原创 322. Coin Change LeetCode
题意:给出硬币的种类和要换的钱,最少可以用多少个硬币去换,不能返回-1。 题解:dp,类似背包的dp,dp[i]表示换成i元的时候最少要多少个硬币。 dp[v] = min(dp[v],dp[v -coins[i]] + 1);class Solution {public: int coinChange(vector<int>& coins, int amount) {
2016-03-16 18:19:47 202
原创 187. Repeated DNA Sequences LeetCode
题意:给出一个字符串,求所有长度为10的重复出现次数大于1的子串。 题解:hash。class Solution {public: vector<string> findRepeatedDnaSequences(string s) { unordered_map<string,int> hash; vector<string> ans; h
2016-03-16 18:16:14 209
原创 139. Word Break LeetCode
题意:给一个字符串,和一个字符串数组,问是否可以把字符串分割成几个单词,这些单词都在字符串数组里面。 题解:dp,dp[i]表示字符串的第i位是否能分割成符合条件的单词。 dp[i] = true,然后去更新dp[i + 1…n],最后判断dp[n]就可以。class Solution {public: bool wordBreak(string s, unordered_set<st
2016-03-16 18:10:44 180
原创 133. Clone Graph LeetCode
题意:clone一张图。 题解:dfs即可。class Solution {public: unordered_map<int,UndirectedGraphNode*> hash; UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { if(node == NULL) return NULL;
2016-03-16 18:02:33 234
原创 69. Sqrt(x) LeetCode
题意:实现(int) sqrt(x) 题解:二分class Solution {public: int mySqrt(int x) { long long l = 0, r = x; while(l < r) { long long mid = (l + r + 1) / 2; if(mid
2016-03-16 17:58:38 196
原创 306. Additive Number LeetCode
题意:给出一个只包含数字的字符串,问是否可以分成至少3个数,前两个数相加等于第三个数。 题解:枚举前两项,有了前两项就可以递推出后面的值,然后递推到跟原字符串长度相等的时候停止,然后比较是否相等,相等说明可以。class Solution {public: bool isAdditiveNumber(string num) { int n = num.length();
2016-03-16 17:56:20 424
原创 208. Implement Trie (Prefix Tree) LeetCode
题意:实现trie树。 题解:class TrieNode {public: char var; TrieNode* children[26]; bool isword; // Initialize your data structure here. TrieNode() { var = 0; isword = false;
2016-03-16 15:17:06 223
原创 229. Majority Element II LeetCode
题意:求一个数组里面出现次数大于n/3的元素。 题解:分析一下,肯定最多存在2个。那么我们可以用类似求次数大于n/2的元素一样的做法。class Solution {public: vector<int> majorityElement(vector<int>& nums) { int t1 = 0, t2 = 0,num1,num2; int n = n
2016-03-16 15:16:01 188
原创 31. Next Permutation LeetCode
题意:求下一个全排列。 题解:STL——next_permutationclass Solution {public: void nextPermutation(vector<int>& nums) { next_permutation(nums.begin(),nums.end()); }};
2016-03-16 15:11:06 206
原创 207. Course Schedule LeetCode
题意:有n门课,给出所有课的先修课程,问能不能按照一个顺序把所有课上完。 题解:典型的拓扑排序。class Solution {public: bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) { bool g[numCourses+1][numCourses+1];
2016-03-16 15:09:53 266
原创 209. Minimum Size Subarray Sum LeetCode
题意:给出一个数组,求长度最小的连续子数组加和大于s。 题解:两个指针,start和end都从0开始。然后往后遍历,如果start到end的和小于s,end继续往后直到加和大于等于s,然后start往后移动,更新答案,直到和小于s。重复这个过程知道start或者end到达最后。class Solution {public: int minSubArrayLen(int s, vector
2016-03-16 15:04:10 168
原创 310. Minimum Height Trees LeetCode
题意:给出一张图,选一个节点作为根使得这棵树最矮,求所有这样的节点。 题解:有点想拓扑排序的做法,就是从度为1的点一层一层往里面扩展,最后剩下的点就是树根。class Solution {public: vector<int> findMinHeightTrees(int n, vector<pair<int, int>>& edges) { if(n == 1) ret
2016-03-16 14:50:50 221
原创 82. Remove Duplicates from Sorted List II LeetCode
题意:给出一个排好序的链表,让你去掉值相同的节点。 题解:直接模拟咯。class Solution {public: ListNode* deleteDuplicates(ListNode* head) { ListNode* root = new ListNode(0); root->next = head; ListNode* ans
2016-03-16 14:34:19 221
原创 49. Group Anagrams LeetCode
题意:把字符串数组中的字符串分组,字符串按字典序排序后一样的字符串放在同一个组内。 题解:对每个串排序,然后hash。class Solution {public: vector<vector<string>> groupAnagrams(vector<string>& strs) { sort(strs.begin(),strs.end()); unor
2016-03-16 14:30:54 283
原创 200. Number of Islands LeetCode
题意:给一个01矩阵,求1的连通块有多少块。 题解:dfs所有没被遍历过的1.class Solution {public: int dir[4][2] = {{1,0},{-1,0},{0,-1},{0,1}}; void dfs(int x,int y,vector<vector<char>>& grid,vector<vector<bool>>& vis) {
2016-03-16 14:21:12 203
原创 134. Gas Station LeetCode
题意:有n个加油站,每个加油站可以加可以走gas[i]米路的油,每个加油站之间的路程是cost[i],问能不能从某个加油站出发环形走一圈。 题解:gas[i] - cost[i]得到的是剩下的油量,如果总剩余量大于0,那么肯定是可以的,只是看你该怎么选起点。有没有人觉得有点像最大连续子段和,其实是的噢,用最大连续子段和来求起点。class Solution {public: int ca
2016-03-16 14:14:33 216
原创 264. Ugly Number II LeetCode
题意:求有2,3,5构成的前n个丑数。 题解:和之前那个super ugly number一样的做法。http://blog.csdn.net/youthinkwu/article/details/50676381class Solution {public: int nthUglyNumber(int n) { int primes[3] = {2,3,5};
2016-03-16 13:46:40 201
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人