
leetcode题目解集
夜白有故事
热爱程序,一起进步
展开
-
Simplify Path
原题链接详细解题思路看代码部分,主要是栈的使用class Solution {public: string simplifyPath(string path) { int idx = 0; //如果有超过2个‘/‘邻近,则去除后一个 while(idx<path.size()-1){ ...原创 2019-05-19 19:53:05 · 164 阅读 · 0 评论 -
Minimum ASCII Delete Sum for Two Strings
原题链接与这道题一样的解法(此处传送门)class Solution {public: int minimumDeleteSum(string s1, string s2) { int m = s1.size(),n = s2.size(); vector<vector<int>> dp(m+1,vector&...原创 2019-05-31 19:22:57 · 198 阅读 · 0 评论 -
Delete Operation for Two Strings
原题链接这道题可以说是最长公共子序列问题的翻版,套用状态转换方程:dp[i][j]表示子字符串word1[0,i),word2[0,j)的解I、当word1[i-1]==word2[j-1]时,dp[i][j]=dp[i-1][j-1];II、当word1[i-1] != word2[j-1]时,dp[i][j]=min(dp[i-1][j],dp[i][j-1])+1。时间复杂度是O...原创 2019-05-31 19:18:41 · 278 阅读 · 0 评论 -
Delete Columns to Make Sorted II
原题链接使用贪心算法class Solution {public: int minDeletionSize(vector<string>& A) { int n = A.size(),m = A[0].size(); int res = 0; for(int i=0;i<m;i++){ ...原创 2019-05-23 17:23:11 · 164 阅读 · 0 评论 -
Minimum Size Subarray Sum
原题链接使用两个变量begin和end来表示nums[begin,end]间所有元素的和,当和sum大于等于目标s时,开始收缩区间[begin,end]直到sum小于s,取得区间长度的最小值即为答案。class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { int ...原创 2019-05-27 23:53:59 · 169 阅读 · 0 评论 -
Course Schedule III
原题链接每一个pair(t,d)表示一个课程,t表示课程需要的时间,d表示该课程必须在时间d之前完成,要求返回最大可以完成的课程的数目。题目的标签为贪心,然后这道题又类似刘汝佳的竞赛书《算法竞赛入门》贪心算法部分关于区间问题的讨论,想到了要先对数组courses根据每个小区间的最后一个元素从小到大进行排序,接着遍历每一门课程,统计当前已经选择的课程所需要的总天数,在选完当前的课程时,判断是否...原创 2019-05-23 00:00:05 · 206 阅读 · 0 评论 -
Course Schedule
原题连接Course Schedule题目三连传送门:Course Schedule iiclass Solution {public: bool canFinish(int numCourses, vector<vector<int>>& pt) { queue<int> q; vector<in...原创 2019-05-22 10:42:25 · 115 阅读 · 0 评论 -
Course Schedule II
原题链接这道题就是典型的拓扑排序问题。简单说一下拓扑排序:对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。拓扑排序算法主要是循环执行以下两步,直到不存在入度为0的顶点为止。(1) 选择一个入度为0的顶点并输出之;(2) 从网中删除此顶点及所有出边。循环结束后,若输出的顶点数小于网中的顶...原创 2019-05-22 10:16:26 · 141 阅读 · 0 评论 -
Edit Distance
原题链接动态规划解决,dp[i][j] 表示 word1[1,i],word2[1,j]的edit distance状态转换方程为:word1[i-1]==word2[j-1] -> dp[i][j] = dp[i-1][j-1]word1[i-1]!=word2[j-1] -> dp[i][j] = min(dp[i-1][j],dp[i][j-1])+1clas...原创 2019-05-14 22:10:59 · 144 阅读 · 0 评论 -
valid-sudoku
题目链接遍历81个点,如果该点是数字则需要进行判断是否合格,如果是’.'则跳过判断到下一个点。class Solution {public: bool res; bool isValidSudoku(vector<vector<char>>& bd) { res= true; dfs(bd,0); ...原创 2019-05-14 21:56:42 · 126 阅读 · 0 评论 -
Longest String Chain
原题链接一般来说这种求最长序列问题都可以用动态规划来解决,那么这道题也不例外。核心的思路是将用一长度的字符串都压到同一个栈中,然后从最长的字符串开始往最短的逐级计算最长序列。还有一个地方关键点是判断两个字符串是否是有效的,即字符串w1和w2是否为长度差1,并且往w1中任意位置插入一个字符就可以得到w2.关键是找到状态转换方程,在这道题里面,我们用map<string,int> ma...原创 2019-05-20 09:59:15 · 481 阅读 · 0 评论 -
Evaluate Reverse Polish Notation
原题链接这几天都在刷stack模块,感觉还行。这道题与括号匹配差不多,都是属于栈的经典例题。遍历整个tokens,判断当前的元素ch是否为操作符:如果不是,就调用stoi函数将ch转为数字类型,并压栈;否则两次出栈,分别得到两次的栈顶元素,进行相应的就算,最后返回栈顶。class Solution {public: int evalRPN(vector<string&...原创 2019-05-19 21:14:31 · 158 阅读 · 0 评论 -
Binary Tree Postorder Traversal
添加链接描述递归解法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} ...原创 2019-05-19 20:53:08 · 113 阅读 · 0 评论 -
Longest Increasing Subsequence最长增长子序列
原题链接class Solution {public: int lengthOfLIS(vector<int>& nums) { int m = nums.size(); if(m==0||m==1)return m; vector<int> res(m,1); ...原创 2019-05-31 19:29:32 · 214 阅读 · 0 评论