![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
朝气
想法太多, 做的太少,
展开
-
LeetCode Missing Number ,SingleNumber I II III
问题Given an array of integers, every element appears twice except for one. Find that single one.解法class Solution {public: int singleNumber(vectorint>& nums) { int n = 0;翻译 2016-09-01 22:50:17 · 332 阅读 · 0 评论 -
leetcode 11 Container With Most Water
问题https://leetcode.com/problems/container-with-most-water/解法直接枚举,复杂度o(n2n^2),会超时。 o(n) 方法:class Solution {public: int maxArea(vector<int>& height) { int ret =0; int l =0;转载 2016-04-11 12:22:26 · 169 阅读 · 0 评论 -
LeetCode 65 Valid Number
问题https://leetcode.com/problems/valid-number/解法构造状态转移表, 根据输入转移class Solution {public: Solution() { memset(stateTable, 0, sizeof(stateTable)); stateTable[Start_s][Blank] = Start原创 2016-05-30 21:41:43 · 430 阅读 · 0 评论 -
leetcode 41 First Missing Positive
问题https://leetcode.com/problems/first-missing-positive/代码将数字放到对应的下标处。 比如1 放在nums[0] 2 放在nums[1] 通过交换实现, 由于每个下标处放特定数,所以交换次数最多为n。 最后统计每一位是否是正确的数, 复杂度为O(n);class Solution {public: int firstMissingP转载 2016-04-21 23:13:49 · 202 阅读 · 0 评论 -
LeetCode 40. Combination Sum II
问题https://leetcode.com/problems/combination-sum-ii/解法回溯法,此题与39不同在于一个数可能出现了多次,此时我们需要制定规则。 首先对所有数从小到大排序,接着回溯法枚举选择和不选择每个数,对于相同数出现多次,我们规定只有第一个数被选择,之后的数才能被选择。 例如 111333444第一个1被选择第二,三个1才可以被选择。这样就不会出现重复。cla原创 2016-04-19 12:44:30 · 244 阅读 · 0 评论 -
LeetCode 39. Combination Sum
问题https://leetcode.com/problems/combination-sum/解法回溯法, 由于是要得到所有结果,如果使用dp求解,每一个状态都要存储可能到达自己的状态,内存开销太大。class Solution {public: void dfs(vector<vector<int>> &ret, vector<int>& now, vector<int>& cand,原创 2016-04-19 11:29:59 · 240 阅读 · 0 评论 -
LeetCode 38. Count and Say
问题https://leetcode.com/problems/count-and-say/解法模拟法, n=100都会超时。class Solution {public: string countAndSay(int n) { string ret; ret.push_back('1'); for (int i=2; i<=n; ++i){原创 2016-04-19 10:34:25 · 185 阅读 · 0 评论 -
LeetCode 37 SudoKu Solver
问题https://leetcode.com/problems/sudoku-solver/解法回溯,注意返回上一级之前要将状态恢复。class Solution {public: bool dfs(vector<vector<char>>& board) { int use[10]; memset(use, 0, sizeof(use));原创 2016-04-19 09:58:08 · 202 阅读 · 0 评论 -
LeetCode 35. Search Insert Position
问题https://leetcode.com/problems/search-insert-position/解法二分查找比大于等于target的第一个元素位置 首先R= nums.size() 表示R是比所有元素都大的。此时只要在[L, R-1]之间找到一个比target 大的最小位置。class Solution {public: int searchInsert(vector<in原创 2016-04-18 22:54:33 · 186 阅读 · 0 评论 -
LeetCode 34. Search for a Range
问题https://leetcode.com/problems/search-for-a-range/解决方法二分查找,首先找到左边界,然后找到右边界。 查找左边界时,我们首先默认R是大于等于target的,然后需要查找[L, R-1] 处小于等于target 的最小位置并赋给R,最后比较R处是否等于target判断是否找到target; 查找右边界时, 首先默认L处是小于等于target的,原创 2016-04-18 22:43:20 · 219 阅读 · 0 评论 -
LeetCode 33. 81 . Search in Rotated Sorted Array
问题33 https://leetcode.com/problems/search-in-rotated-sorted-array/ 81 https://leetcode.com/problems/search-in-rotated-sorted-array-ii/分析对一个rotate后的数组,如果从中间分开,则至少有一半是拍好序的。可以通过判断第一个元素< 最后一个元素 知道当前这一半是否已原创 2016-04-18 17:03:20 · 194 阅读 · 0 评论 -
LeetCode 32. Longest Valid Parentheses
问题https://leetcode.com/problems/longest-valid-parentheses/解法一首先找到所有不能匹配的‘)’ 和 ‘(’ 将s分为若干部分,每一部分子串都是合法的。只需要统计最长子串即可。找到不匹配的’)’ 只需要从前往后遍历一遍s即可。所以复杂度为2N;class Solution {public: int longestValidParenth原创 2016-04-18 15:14:39 · 173 阅读 · 0 评论 -
LeetCode 31. Next Permutation
问题https://leetcode.com/problems/next-permutation/方法原文:http://blog.csdn.net/cpfeed/article/details/7376132 1, 使用STL 中的next_permutation函数。 2, 自己实现next_permutation; 分为四个步骤: a, 从后往前找到第一个非递增的元素A[i]; 即 i原创 2016-04-18 10:49:46 · 186 阅读 · 0 评论 -
LeetCode 36 Valid Sudoku
问题https://leetcode.com/problems/valid-sudoku/解法枚举每一行,每一列和每一个小正方形,看是否有重复的数字。class Solution {public: bool isValidSudoku(vector<vector<char>>& board) { if (board.size() ==0) retur原创 2016-04-18 09:35:45 · 180 阅读 · 0 评论 -
LeetCode 146. LRU Cache
问题实现LRU算法.代码hash_map + double linked list实现 每次访问key处的内存时,先在hash_map 中查找cache中地址, 1,如果找到,就在cache中进行内存操作,在结束时,将key指向的节点移动到双向链表头部。 2,如果写入时没有找到, 就在double linked list 头部加入一个节点,如果此时没有可用空间,则先要将链表最后一个节点释放。c原创 2016-04-17 10:52:13 · 176 阅读 · 0 评论 -
leetcode 42. Trapping Rain Water
问题https://leetcode.com/problems/trapping-rain-water/代码class Solution {public: int trap(vector<int>& height) { int L = 0; int R = height.size()-1; int ret = 0; int m转载 2016-04-23 23:18:40 · 186 阅读 · 0 评论 -
leetcode 90. Subsets II
问题https://leetcode.com/problems/subsets-ii/解法回溯法, 首先不考虑重复的出现的情况, 那么就是列举C(n, 0), C(n, 1), C(n, 2) … C(n, n); C(n, k) 可以使用递归求解, 每一层决定一个数字,最多递归k层。每层枚举使用的数字。 接着考虑有重复的情况, 首先将输入数字排序, 使得相同数字在一起, 然后在枚举时,我们制定原创 2016-06-08 15:30:05 · 244 阅读 · 0 评论 -
LeetCode 140. Word Break II
问题https://leetcode.com/problems/word-break-ii/解法dp , 状态dp[i] = true 表示s.substr(i) 是能被分开. 递推公式为: dp[i] = dp[i+1] && InDict(s.substr(i, 1)) || dp[i+2] && InDict(s.substr(i, 2)) … 当求出dp[] 数组后, 可以使用dfs 查原创 2016-08-09 23:26:50 · 377 阅读 · 0 评论 -
Leetcode 143. Reorder List
问题https://leetcode.com/problems/reorder-list/解法step 1, 将链表分成两份, step 2, 将后一半链表逆序 step 3, 合并两个链表。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next;转载 2016-08-17 22:09:18 · 256 阅读 · 0 评论 -
Leetcode 135. Candy
问题https://leetcode.com/problems/candy/解法class Solution {public: int candy(vector<int>& ratings) { if (ratings.size() < 2) return ratings.size(); vector<int> num(ratings转载 2016-08-17 21:28:31 · 297 阅读 · 0 评论 -
LeetCode 134. Gas Station
问题https://leetcode.com/problems/gas-station/解法首先有两个性质: 1, If car starts at A and can not reach B. Any station between A and B can not reach B.(B is the first station that A can not reach.)翻译 2016-08-17 20:32:11 · 226 阅读 · 0 评论 -
leetCode . Binary Tree Inorder/ Preorder/ Post Traversal iteratively
问题https://leetcode.com/problems/binary-tree-inorder-traversal/解法http://www.cnblogs.com/AnnieKim/archive/2013/06/15/morristraversal.html转载 2016-06-14 11:23:15 · 254 阅读 · 0 评论 -
Leetcode 87. Scramble String
问题https://leetcode.com/problems/scramble-string/解法1递归 时间复杂度O(n^n)?class Solution {public: bool isScramble(string s1, string s2) { if (s1.size() != s2.size()) return false;原创 2016-06-13 21:57:08 · 219 阅读 · 0 评论 -
LeetCode 89. Gray Code
问题https://leetcode.com/problems/gray-code/解法class Solution {public: vector<int> grayCode(int n) { vector<int> ret; for (int i=0; i< (1<<n); ++i) { ret.push_back转载 2016-06-13 20:39:17 · 225 阅读 · 0 评论 -
Leetcode 85. Maximal Rectangle
问题https://leetcode.com/problems/maximal-rectangle/解法1转换成LeetCode 84 Largest Rectangle in Histogram 枚举每一行, 统计每一列从当前行向上连续1 的个数作为高度, 然后每一行使用84 中的算法求得最大矩形。 矩形为n行*m列 时间复杂度O(n*m), 空间复杂度O(m);class Solution原创 2016-06-13 19:21:30 · 369 阅读 · 0 评论 -
LeetCode 84 Largest Rectangle in Histogram
问题https://leetcode.com/problems/largest-rectangle-in-histogram/解法1枚举法, 时间复杂度O(n^2)// TLEclass Solution {public: int largestRectangleArea(vector<int>& heights) { int ret = 0; for (原创 2016-06-13 17:32:19 · 280 阅读 · 0 评论 -
LeetCode 76. Minimum Window Substring
问题https://leetcode.com/problems/minimum-window-substring/解法滑动窗口, 首先记录每个字符在t中出现的次数。 在s中移动窗口的右侧, 每次进入窗口的字符,其计数器减1, 如果该字符在t中出现,则总的计数器减一, 如果总的计数器为0 则表示窗口内的字符包含t,此时再将窗口的左侧前移, 每移一位, 对应字符的计数器加1, 如果计数器大于1, 则转载 2016-06-04 21:55:53 · 286 阅读 · 0 评论 -
leetCode 72. Edit Distance
问题https://leetcode.com/problems/edit-distance/解法考虑从单词后面向前修改word1, 设置状态f(i, j) 表示将word1 【0~i】修改为word2 【0~j】所需要的次数。 有三种对应的修改方法, 状态转移方程为 f(i, j) = f(i-1, j-1) +1 //如果word1[i] != word2[j] 修改 f(i, j) = f原创 2016-06-04 18:07:22 · 297 阅读 · 0 评论 -
LeetCode 63. Unique Paths II
问题https://leetcode.com/problems/unique-paths-ii/解法dp 公式为 f(i, j) = f(i, j+1) + f(i-1, j) obstacleGrid[i][j] == 0; f(i, j) = 0 obstacleGrid[i][j] == 1class Solution {public: int uni原创 2016-05-22 22:16:27 · 216 阅读 · 0 评论 -
LeetCode 62. Unique Paths
问题求组合数C(n, m);解法使用递推公式 C(n, m) = C(n-1, m-1) + C(n-1, m); 理解: 从n个元素中取出m个元素, 考虑存在一个特殊元素,第一类取法不包括特殊元素则从其他元素中拿m个,有C(n-1, m) 种方案, 第二类取法包括特殊元素则从其他元素中拿m-1个有C(n-1, m-1)种方案。 边界条件: 规定C(n, 0) = 1;class Solutio原创 2016-05-22 00:01:12 · 218 阅读 · 0 评论 -
leetcode 73. Set Matrix Zeroes
问题https://leetcode.com/problems/set-matrix-zeroes/解法将列中有0 的信息存储在一行中, 这行满足存在一个元素为0; 接着先将存在0的行全部改为0, 再根据存储的每列信息,将有0的列置为0;class Solution {public: void setZeroes(vector<vector<int>>& matrix) {转载 2016-06-04 01:11:52 · 313 阅读 · 0 评论 -
hiho 60. Permutation Sequence
问题https://leetcode.com/problems/permutation-sequence/解法复杂度o(n^2)class Solution {public: string getPermutation(int n, int k) { bool flag[n+1]; int f = 1; for (int i=1; i<=n;原创 2016-04-29 18:54:51 · 217 阅读 · 0 评论 -
leetcode 56. Merge Intervals
问题https://leetcode.com/problems/merge-intervals/解法首先按照start 排序, 逐个插入,如果与最后一个相交则合并,否则插入新节点。/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : s原创 2016-04-29 16:46:34 · 197 阅读 · 0 评论 -
leetcode 10 Regular Expression Matching
问题https://leetcode.com/problems/regular-expression-matching/解法一 递归class Solution {public: bool sol(const char *s, const char * p) { if (*p == 0) return *s==0; if (*(原创 2016-04-10 11:33:40 · 184 阅读 · 0 评论 -
LeetCode 50. Pow(x, n)
问题https://leetcode.com/problems/powx-n/解法计算出2的幂次个x相乘的结果,然后将n分解成2的幂次,使用log(n)次即可求得结果。class Solution {public: double myPow(double x, int n) { if (x ==0.0 && n == 0) return 0.0/0.原创 2016-04-26 20:56:00 · 209 阅读 · 0 评论 -
LeetCode 49. Group Anagrams
问题https://leetcode.com/problems/anagrams/代码使用hash + set class Solution {public: vector<vector<string>> groupAnagrams(vector<string>& strs) { unordered_map<string, multiset<string>> mp;转载 2016-04-26 20:30:20 · 188 阅读 · 0 评论 -
LeetCode 45. Jump Game II
问题https://leetcode.com/problems/jump-game-ii/解法贪心法, 首先使用一个堆栈记录跳转路径,从后往前走(参考上一篇), 不断加入新节点,如果新节点可以跳过栈顶节点而到达栈的其他节点,则删除之间的节点。这样得到的路径总是比之前的路径短。class Solution {public: int jump(vector<int>& nums) {原创 2016-04-26 10:32:13 · 201 阅读 · 0 评论 -
Leetcode 55. Jump Game
问题https://leetcode.com/problems/jump-game/解法贪心法: now 表示要到达最后一个位置,至少要到达的位置。如果有位置i可以到达now则now = i;从后向前扫描如果now==0 则表示可以从0处到达最后一个位置。class Solution {public: bool canJump(vector<int>& nums) { i原创 2016-04-26 10:02:16 · 195 阅读 · 0 评论 -
leetCode 20 Valid Parentheses
问题https://leetcode.com/problems/valid-parentheses/解法一(2ms)使用c++ stack实现class Solution {public: bool isValid(string s) { stack<char> st; for (int i=0; i< s.size(); i++) {原创 2016-04-12 20:10:05 · 201 阅读 · 0 评论 -
leetcode 19 Remove Nth Node From End of List
问题https://leetcode.com/problems/remove-nth-node-from-end-of-list/解法设置两个指针,第一个指向第一个,第二个指向第n+1个,这样同时向后移动两个指针,当第二个到尾部时,第一个正好在要删除的位置的前一个。 小tips:在链表头上加一个头结点, 就不用考虑删除链表头的问题了。/** * Definition for singly-lin原创 2016-04-12 19:53:01 · 177 阅读 · 0 评论