- 博客(32)
- 资源 (9)
- 收藏
- 关注
转载 LeetCode之Merge k Sorted Lists
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; 采用分治算法。参考自:http://www.cnblogs.com/TenosDoIt/
2015-07-31 21:03:40 350
原创 LeetCode之Merge Two Sorted Lists
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* me
2015-07-31 14:54:42 219
原创 LeetCode之Merge Sorted Array
/*解题思路:从后面开始遍历两个数组,选择较大元素加入到数组的尾部。直到两个数组都已经加入。*/class Solution {public: void merge(vector& nums1, int m, vector& nums2, int n) { int idx1(m-1); int idx2(n-1); int idx(m+
2015-07-31 14:25:54 250
转载 LeetCode之Word Break II
/*与Word Break II 相似,不过需要记住单词的前驱。用深度搜索算法获得结果输出。参考自:https://github.com/soulmachine/leetcode*/class Solution {public: vector wordBreak(string s, unordered_set& wordDict) { if(s.empty()) r
2015-07-30 10:48:11 335
原创 LeetCode之Word Break
/*动态规划法。设dp[i]表示s[0...i]是否满足题意,则有dp[i] = {dp[k] && s.substr(k, i-k)}(k=0...i-1,有一个为真即可)。*/class Solution {public: bool wordBreak(string s, unordered_set& wordDict) { if(s.empty()) retu
2015-07-29 09:55:19 340
原创 LeetCode之Distinct Subsequences
/*动态规划法。设dp[i][j]表示S[0...i]中T[0...j]出现的次数,则有1)若S[i]!=S[j],dp[i][j] = dp[i-1][j];2)若S[i]==S[j],dp[i][j] = dp[i-1][j] + dp[i-1][j-1]。*/class Solution {public: int numDistinct(string s, string t
2015-07-28 22:06:52 303
原创 LeetCode之Decode Ways
class Solution {public: int numDecodings(string s) { if(s.empty()) return 0; vector dp(s.size(), 0); if(s[0] > '0') dp[0] = 1; else if(s[0] == '0') return 0;
2015-07-24 23:00:14 344
原创 LeetCode 之Edit Distance
/*动态规划法。用dp[i][j]表示word1[i...m],word[j...n]的距离(m,n分别表示其最后一个元素)。1)若word1[i] == word2[j],则有dp[i][j] = dp[i+1][j+1];2)若word1[i] != word2[j], 则有dp[i][j] = min{ dp[i+1][j+1]+1(这种情况是用word1[i]代替word2[
2015-07-24 21:58:59 288
原创 LeetCode之Minimum Path Sum
/*动态规划法。用dp[i][j]表示从左上角到grid[i][j]表示的元素的最小距离。则有dp[i][j] = min{dp[i][j-1]+grid[i][j], dp[i-1][j]+grid[i][j]}。下面在实现过程中采用滚动数组的方法将空间复杂度降到o(n).*/class Solution {public: int minPathSum(vector>& gri
2015-07-24 11:33:06 340
转载 LeetCode之Scramble String
/*动态规划法。设状态为 f[n][i][j],表示长度为 n,起点为 s1[i] 和起点为 s2[j] 两个字符串是否互为 scramble,则状态转移方程为f[n][i][j]} = (f[k][i][j] && f[n-k][i+k][j+k])|| (f[k][i][j+n-k] && f[n-k][i+k][j])。参考自:https://github.com/soulmach
2015-07-24 10:45:53 322
原创 LeetCode之Interleaving String
/*动态规划法。用dp[i][j]==true表示s1[0...i-1]和s2[0...j-1]能组成s3[0...i+j-1],则dp[i][j] = (dp[i-1][j] && s1[i-1]==s3[i+j-1]) || (dp[i][j-1] && s2[j-1]==s3[i+j-1]).*/class Solution {public: bool isInterleav
2015-07-23 10:23:32 326
转载 LeetCode之Best Time to Buy and Sell Stock III
/*由于最多存在两次交易,所以可以将数组分成两个子段,两个子段中分别做一次交易,使得两侧交易之和最大即可。当在同一天进行了买入和卖出时,相当于不做交易,即整个流程中只进行一次交易。用f[i]表示[0,i]中最大的值,g[i]表示[i,n-1]中交易最大的值。那么结果即为max{f[i]+g[i]};参考自:https://github.com/soulmachine/leetcode*/
2015-07-22 22:36:54 277
原创 LeetCode之Maximal Rectangle
/*这道题是Largest Rectangle in Histogram的二维版本,因此可以将一维版本的解法应用到这道题的解法中。*/class Solution {public: int maximalRectangle(vector>& matrix) { if(matrix.empty()) return 0; vector height(mat
2015-07-21 22:14:15 367
原创 LeetCode之Palindrome Partitioning II
/*动态规划法。用dp[i]表示s[0...i]的最小cut数目。令j<=i,1)如果s[j...i]是回文串,那么dp[i] = min{dp[j-1]+1, dp[i]};2)如果s[j...i]不是回文串,那么i...j这些子字符串无法合并,它们对减少cut数目没有贡献,此时无需更新dp数组。为了判断s[j...i]是否是回文串,需要用一个二维数组来记录。*/class Solu
2015-07-16 19:55:12 320
原创 LeetCode之Maximum Subarray
/*动态规划法。*/class Solution {public: int maxSubArray(vector& nums) { if(nums.empty()) return 0; int res(INT_MIN), sum(-1); for(int i = 0; i < nums.size(); ++i){
2015-07-16 11:34:23 333
原创 LeetCode之Triangle
/*动态规划法。思路:从最后一层往上走,直到第一层。那么从最下层到达某个数triangle[i][j]的最小值的递推为:dp[i][j] = triangle[i][j] + min(dp[i+1][j] + dp[i+1][j+1])。最后返回dp[0][0]即为答案。(这里采用一维数组即可(因为dp[i-1]的求解不影响dp[i]的求解)。)*/class Solution {pub
2015-07-15 14:27:31 308
原创 hihoCoder之#1000 : A + B
#include using namespace std;int main(){ int a, b; while(cin >> a >> b){ cout << a + b << endl; } return 0;}
2015-07-13 18:52:12 999
原创 hihoCoder #1015之KMP算法
#include #include #include using namespace std;class Solution {public: int kmp_search(const string &s, const string &p) { if(s.size() < p.size()) return 0; vector next(p.size()+1, 0); ge
2015-07-13 18:50:19 546
原创 LeetCode之Evaluate Reverse Polish Notation
/*用栈模拟后缀表达式的求值过程。遍历字符串的容器:1.遇到符号,将栈里面最上面的两个数字出栈进行符号表示的相应计算,并将结果入栈。2.遇到数字,将数字入栈。3.最后,栈顶元素即表达式的结果。*/class Solution {public: int evalRPN(vector& tokens) { if(tokens.empty()) return 0;
2015-07-10 21:54:39 327
转载 LeetCode之Largest Rectangle in Histogram
/*用栈维持一个不递减的数组的下标。用以获取某个连续段的最大矩形。参考自:https://github.com/soulmachine/leetcode*/class Solution {public: int largestRectangleArea(vector& height) { if(height.empty()) return 0; height.push_back(0
2015-07-09 22:48:12 404
转载 LeetCode之Longest Valid Parentheses
/*开一个栈,用来存储'('的下标。每一个')'会匹配一个'('。参考自:https://github.com/soulmachine/leetcode*/class Solution {public: int longestValidParentheses(string s) { if(s.empty()) return 0; stack left_
2015-07-08 22:01:03 311
原创 LeetCode之Valid Parentheses
/*本题直接采用栈模拟的方式。*/class Solution {public: bool isValid(string s) { if(s.empty()) return true; string res(""); for(int i = 0; i < s.size(); ++i){ if(s[i] == '('
2015-07-08 21:15:35 282
原创 LeetCode之Length of Last Word
/*找到最后一个单词最后一个字母出现的位置,以及第一个字母出现的位置的前一个位置。这两个位置相减就是最后一个单词长度。*/class Solution {public: int lengthOfLastWord(string s) { if(s.empty()) return 0; int last(s.size()-1), first(0);
2015-07-08 17:25:44 310
转载 LeetCode之Simplify Path
/*细节模拟题。参考自:https://github.com/soulmachine/leetcode*/class Solution {public: string simplifyPath(string path) { string res; vector path_name; string::iterator it = path.
2015-07-07 17:32:14 397
转载 LeetCode之Anagrams
/*这里回文构词法,值得单词中的字母相同时,是同一组。那么我们将用unordered_map将它们分组存起来,最后输出成组的回文词组即可。方法参考自:https://github.com/soulmachine/leetcode*/class Solution {public: vector anagrams(vector& strs) { unordered_map
2015-07-07 16:45:35 357
原创 LeetCode之Count and Say
/*这是一道模拟题。第n个序列是根据n-1个序列获得的,所以通过n-1次循环即可获得结果。*/class Solution {public: string countAndSay(int n) { string res("1"); while(--n) res = getNext(res); return res; }
2015-07-07 16:25:09 281
原创 LeetCode之Longest Common Prefix
class Solution {public: string longestCommonPrefix(vector& strs) { if(strs.empty()) return ""; for(int i = 0; i < strs[0].size(); ++i){ for(int j = 1; j < strs.size();
2015-07-06 21:51:47 348
原创 LeetCode之Wildcard Matching
/*这里的难度主要是理解题意,题中要点如下:1.字符‘?’能匹配任何单个字符;2.字符‘*’能匹配任意长度的任意字符串。(这说明p中‘*’可以用来匹配s中0个、1个、2个...n个字符)根据以上题意,遍历p中*所有的匹配情况,即可获得解答方法。*/class Solution {public: bool isMatch(string s, string p) {
2015-07-06 21:39:52 365
转载 LeetCode之Regular Expression Matching
/*这道题最关键的是理解题意。最重要的是:当一个字母后面跟着字符'*',表示这个字符重复0次,1次,...,n次。所以在判断字符串是否匹配时,需要看接下来p的字符是否为'*'字符。分两种情况处理*///方法一:递归法class Solution {public: bool isMatch(string s, string p) { if(p.empty()) ret
2015-07-03 21:42:25 304
原创 LeetCode之Longest Palindromic Substring
/*暴力法:以每个元素为中心,左右扩展,找到以其为中心的最大回文串*/class Solution {public: string longestPalindrome(string s) { if(s.size() < 2) return s;//字符串数小于2,都为回文串 int count(-1); int left, right;
2015-07-01 21:35:44 266
原创 LeetCode之Add Binary
class Solution {public: string addBinary(string a, string b) { int i(a.size() - 1), j(b.size() - 1); int carry(0); string res(""); while(i >= 0 && j >= 0){
2015-07-01 21:12:43 364
原创 LeetCode之String to Integer(atoi)
class Solution {public: int myAtoi(string str) { int sign(1); int i(0), len = str.size(); long long value(0); while(i < len && str[i] == ' ') ++i;
2015-07-01 21:01:31 260
cubic convolution/bilinear/nearest image resize matlab实现
2018-04-29
Image Sensors and Signal Processing for Digital Still Cameras
2018-03-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人