Leetcode
Lyrix28
这个作者很懒,什么都没留下…
展开
-
493. Reverse Pairs [Leetcode] [Based on Merge-Sort] [java]
查看问题计算目标对数while (i <= m) { j = m+1; while (j <= r && nums[i] > (long)nums[j]*2) j ++; count += j-m-1; i ++;}归并排序while (i <= m && j原创 2018-09-09 14:04:24 · 273 阅读 · 0 评论 -
57. Insert Interval
查看题目一种很简洁的方法,只需要三个while循环,时间复杂度为O(n)第一个while循环负责在n新区间左部的,第二个while负责和新区间重合的,第三个while循环负责在新区间右部的。/** * Definition for an interval. * struct Interval { * int start; * int end; * I...原创 2018-12-01 21:23:51 · 130 阅读 · 0 评论 -
887. Super Egg Drop
查看题目谷歌当年的面试题的加强版,仿佛脑筋急转弯一步一步来,要求的是最小的 最大步数。最大是指,在最坏情况下,求得F需要的步数;最小是指,在各种策略下,所能求出的最小的最大值。优秀的dp走起来,那最优值即最小的最大步数,状态dp[n][k]表示n层k蛋的最优值接下来,求dp[n][k]时,假设一个鸡蛋从第i层扔下,有两种情况:碎了。碎了不能再用。那接下来测i之下的层数,即dp...原创 2018-11-25 21:27:12 · 178 阅读 · 0 评论 -
943. Find the Shortest Superstring
查看题目如果将每个字符串看作一个节点,并且记录下两两之间的重叠字符数,那么问题就变成,遍历所有的节点(每个节点访问一次),消除掉重叠的字符。类似于TSP问题。状态方程dp[V][j]表示访问过集合V中所有节点(即包含所有字符串),以j结尾的superstring。V由二进制编码表示(即1代表在集合中,0代表不在),这样,表示n个节点需要n位(共2^n个集合)。状态转移方程dp[V]...原创 2018-11-18 23:46:29 · 530 阅读 · 0 评论 -
44. Wildcard Matching
查看题目根据判断s串前i个和p串前j个来进行动态规划状态转移方程为match[i][j] =match[i-1][j-1] and 当前字符达成匹配match[i-1][j] and 当前匹配符为*match[i][j-1] and 当前匹配符为*class Solution {public: bool isMatch(string s, string p) { ...原创 2018-11-08 23:17:21 · 86 阅读 · 0 评论 -
547. Friend Circles
查看题目可以先求出矩阵的闭包,再判断有几个强连通图使用Floyd-Warshall算法算法求出闭包,一个强连通图代表一个Circleclass Solution {public: int findCircleNum(vector<vector<int>>& M) { int size = M.size(); vec...原创 2018-11-04 17:28:44 · 87 阅读 · 0 评论 -
416. Partition Equal Subset Sum
查看题目可以看作是一个背包问题,当背包内的总和达到所有数总和的一半时,达到目标,状态转移方程为dp[i][j] = dp[i-1][j] | dp[i-1][sum/2-j]考虑到若dp[i-1][j]为真,则dp[i][j]为真,可以将二维数组变成一维数组,此时需要从后向前循环。class Solution {public: bool canPartition(vecto...原创 2018-10-27 21:39:40 · 77 阅读 · 0 评论 -
45. Jump Game II
查看题目每次选择的时候都选择最有利的,即跳得最远。class Solution {public: int jump(vector<int>& nums) { int s = nums.size(); if (s == 1) return 0; int rtn = 0; //一次循环就是一跳 ...原创 2018-10-20 15:14:36 · 128 阅读 · 0 评论 -
332. Reconstruct Itinerary
查看题目默认起始站为JFK,压入vector查找以vector末端为起始站的pair,找到自然排序最小的,压入vactor,并将此pair从tickets中删除。重复步骤2,直到tickets为空class Solution { public: vector<string> solution; vector<string> findIt...原创 2018-09-30 17:48:37 · 100 阅读 · 0 评论 -
743. Network Delay Time [Dijkstra]
查看题目经典Dijkstra算法typedef pair&lt;int, int&gt; intint;const int INF = 10000; //100*100, N和w最大值均为100class Solution {public: int networkDelayTime(vector&lt;vector&lt;int&gt;&gt;&amp; times, in原创 2018-10-07 21:50:24 · 140 阅读 · 0 评论 -
4. Median of Two Sorted Arrays [Merge]
查看题目经典的归并排序,相当于两个数组已经排好序,要合并到一起。在合并的过程中,我们可以找到中位数class Solution {public: double findMedianSortedArrays(vector&lt;int&gt;&amp; nums1, vector&lt;int&gt;&amp; nums2) { int n1 = nums1.si...原创 2018-10-12 18:58:37 · 72 阅读 · 0 评论 -
124. Binary Tree Maximum Path Sum [Leetcode] [DFS] [c++]
查看题目在DFS的过程中,计算路径和对任一节点,可能是最大路径树的根节点,起始节点,中间节点class Solution {public: int maxSum; int maxPathSum(TreeNode* root) { //对maxSum初始化为root-&gt;val或者最小负数 maxSum = root-&gt;val;...原创 2018-09-23 17:21:19 · 111 阅读 · 0 评论 -
43. Multiply Strings [Leetcode] [FFT] [python]
查看题目 一道大数相乘的题,大数也可以看成是多项式,再运用FFT来处理。 粗略步骤: 1. 将多项式从系数表示转为点值表示 2. 把两个多项式的点值表示相乘 3. 将相乘后的点值表示转为系数表示1. 将多项式从系数表示转为点值表示系数表示: A(x)=a0+a1x+a2x2+⋅⋅⋅+an−1xn−1A(x)=a0+a1x+a2x2+···+an−1xn−1...原创 2018-09-16 20:59:39 · 669 阅读 · 1 评论 -
51. N-Queens
查看题目皇后可以横着、竖着、斜着走。也就是皇后所在的行、列、对角线不能有另一个皇后。每行有一个皇后,一行一行进行判断当前行某位置是否可以放置,进行DFS。有性质,若(x,y)放置了皇后,那么不可以再有一个位置(i,j),x+y == i+j || x-y == i-jclass Solution {public: vector&lt;vector&lt;string&gt;&...原创 2018-12-09 15:40:48 · 197 阅读 · 0 评论