![](https://img-blog.csdnimg.cn/2021042421352486.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Leetcode
lc
kelianlee
这个作者很懒,什么都没留下…
展开
-
leetcode 14. 最长公共前缀 go实现
100%这题属于一类的二分查找问题,类似于最小值最大化,对于查找的区间,我们可以通过二分查找算法收敛于最优解复杂度O(n2logn)func longestCommonPrefix(strs []string) string { temp := 0x3f3f3f3f if len(strs) == 0 { return "" } for _,j := range strs { lens := len(j) if原创 2021-03-21 01:09:26 · 138 阅读 · 0 评论 -
leetcode 148. 排序链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode*...原创 2020-02-24 22:20:25 · 120 阅读 · 0 评论 -
leetcode 172. 阶乘后的零
/*对于一个数的阶乘,就如之前分析的,5 的因子一定是每隔 5 个数出现一次,也就是下边的样子。n! = 1 * 2 * 3 * 4 * (1 * 5) * ... * (2 * 5) * ... * (3 * 5) *... * n因为每隔 5 个数出现一个 5,所以计算出现了多少个 5,我们只需要用 n/5 就可以算出来。但还没有结束,继续分析。... * (1 * 5) * ...原创 2020-02-24 21:50:12 · 117 阅读 · 0 评论 -
leetcode 887. 鸡蛋掉落
O(knlogn)class Solution {public: int mp[110][11111]; int dp(int k,int n) { if(k==1) return n; if(n==0) return 0; //if(mp[make_pair(k,n)]) return mp[make_pair(k,n...原创 2020-02-24 21:45:53 · 386 阅读 · 0 评论 -
面试题51. 数组中的逆序对
class Solution {public: int lowbit(int x) {return x&(-x);} void update(int i,vector<int>& c) {//单点更新,更新这个点还要更新他的父亲所以是i+=lowbit(i) while(i <= c.size()) ...原创 2020-02-22 18:08:50 · 181 阅读 · 0 评论 -
leetcode 279. 完全平方数
class Solution {public: int numSquares(int n) { vector<int> dp(n+10); dp[1]=1; dp[2]=2; for(int i=3;i<=n;i++) { dp[i]=100000000; ...原创 2020-02-21 18:22:16 · 117 阅读 · 0 评论 -
leetcode 264. 丑数 II
/* 用三个指针分别对应2,3,5的乘机倍数*/class Solution {public: int nthUglyNumber(int n) { int dp[2222]; int i1=1; int i2=1; int i3=1; dp[1]=1; for(int i=...原创 2020-02-21 17:54:32 · 140 阅读 · 0 评论 -
leetcode 240. 搜索二维矩阵 II
class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int n=matrix.size()-1; int m=0; while(n>=0 && m<matri...原创 2020-02-21 17:45:10 · 109 阅读 · 0 评论 -
leetcode 227. 基本计算器 II
class Solution {public: typedef long long ll; int calculate(string s) { s += "+";//在末尾加一个+号运算符 if (s.empty()) return 0; stack<int> vals; stack<char...原创 2020-02-21 16:46:46 · 128 阅读 · 0 评论 -
leetcode 222. 完全二叉树的节点个数
/* 最底层的中间位置为根节点右儿子一直往左边遍历的点 我们每次判断这个点是否为空如果为空那就在左边否则在右边 */class Solution {public: int countNodes(TreeNode* root) { if(!root) return 0; int depth = f(root); ...原创 2020-02-21 16:29:39 · 134 阅读 · 0 评论 -
leetcode 221. 最大正方形
dp[i][j]表示这个点的最大正方形边长public class Solution { public int maximalSquare(char[][] matrix) { int rows = matrix.length, cols = rows > 0 ? matrix[0].length : 0; int[][] dp = new i...原创 2020-02-21 03:18:45 · 129 阅读 · 0 评论 -
leetcode 220. 存在重复元素 III
/* 用set.size()来控制整个窗口的大小如果在set中存在nums[j]这说明 i,j之间的绝对值差小于k 然后用lower_bound查询nums[i]-t,nums[i]+t的值是否存在*/class Solution {public: bool containsNearbyAlmostDuplicate(vector<int>&...原创 2020-02-21 02:03:22 · 114 阅读 · 0 评论 -
堆排序
# 基本思路步骤一:建立大根堆--将n个元素组成的无序序列构建一个大根堆, 步骤二:交换堆元素--交换堆尾元素和堆首元素,使堆尾元素为最大元素; 步骤三:重建大根堆--将前n-1个元素组成的无序序列调整为大根堆 重复执行步骤二和步骤三,直到整个序列有序。void adjust(vector<int> &arr, int len, int index){...原创 2020-02-21 01:13:47 · 111 阅读 · 0 评论 -
leetcode 215. 数组中的第K个最大元素
/* 用快排的划分算法定义一个基准点pos然后[i,j]区间遍历, 在区间左边找到一个比基准点大的数右边找到一个比基准点小的数交换 这样就能确定基准点右边都是比它大,左边都是比他小的区间,最后交换基准点与 l1的位置那个这个pos就是整个区间的第l1大,这时候比较l1与k的大小选择去左边 还是右边递归*/class Solution {publi...原创 2020-02-21 00:21:54 · 116 阅读 · 0 评论 -
leetcode 214. 最短回文串
/* 将字符串反转之后中间加"#"做拼接然后用kmp求next数组*/class Solution {public: string shortestPalindrome(string s) { string revs = s;//存s的逆序 int tn = s.size();//中点处,#前面的位置 reverse(re...原创 2020-02-20 02:31:09 · 190 阅读 · 0 评论 -
leetcode 169. 多数元素
/* 对于每个后缀当cont=0时,我们定义后缀的第一个元素为所求元素*/class Solution {public: int majorityElement(vector<int>& nums) { int cont=0; int tmp; for(int i=0;i<nums.size();...原创 2020-02-19 20:50:26 · 155 阅读 · 0 评论 -
leetcode 162. 寻找峰值
/* 对mid的位置与mid+1的位置做比较*/class Solution {public: int findPeakElement(vector<int>& nums) { int n=nums.size(); int l=0; int r=n-1; while(l < r)...原创 2020-02-19 18:26:00 · 101 阅读 · 0 评论 -
leetcode 160. 相交链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode ...原创 2020-02-19 01:50:06 · 111 阅读 · 0 评论 -
leetcode 153. 寻找旋转排序数组中的最小值
/* 注意元素只有一个的情况以及if内的条件要是>= 当访问到的元素是nums[0]*/class Solution {public: int findMin(vector<int>& nums) { if (nums.back() > nums[0] || nums.size()==1) return nums[...原创 2020-02-19 01:41:05 · 128 阅读 · 0 评论 -
leetcode 152. 乘积最大子序列
/* dp[i]表示到i为止的最大乘机 dp[i]=max(dp[i-1]*num[i],num[i]); dp[i]=之前的dp值乘上num[i]或者不乘 由于有负数在维护一个dpmin[],当为负数时交换*/class Solution {public: int maxProduct(vector<int>& nums)...原创 2020-02-19 01:28:59 · 87 阅读 · 0 评论 -
leetcode 146. LRU缓存机制
assign() 给list赋值 back() 返回最后一个元素 begin() 返回指向第一个元素的迭代器 clear() 删除所有元素 empty() 如果list是空的则返回true end() 返回末尾的迭代器 erase() 删除一个元素 front() 返回第一个元素 get_allocator() 返回list的配置器 insert() 插入一个元素到list...原创 2020-02-19 00:47:52 · 88 阅读 · 0 评论 -
leetcode 141. 环形链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool hasC...原创 2020-02-18 22:03:49 · 74 阅读 · 0 评论 -
leetcode 135. 分发糖果
class Solution {public: int candy(vector<int>& ratings) { int n=ratings.size(); vector<int> num1(n+10,1); for(int i=1;i<n;i++) if(ratings...原创 2020-02-18 21:32:51 · 99 阅读 · 0 评论 -
leetcode 132. 分割回文串 II
/* 先用dp[i][j]预处理出[i,j]这个区间的回文串 然后用ans[i]dp出到i这个位置最少的分割次数 如果dp[0][i]是一个回文串那就直接分割0次 否则分割[0,i]这个区间由于[0,j]这个区间的ans已经求出 我们只要判断s[j+1][i]这个区间是不是回文如果是就ans[j]+1*/class Solution {publi...原创 2020-02-18 20:43:53 · 131 阅读 · 0 评论 -
leetcode 128. 最长连续序列
/* 将所有的num放到hashset里面,对于查询实现O(1)复杂度 然后我们遍历nums我们只遍历num-1不存在的数,这样的数开头的连续数*/class Solution {public: int longestConsecutive(vector<int>& nums) { unordered_map<int,i...原创 2020-02-18 01:20:37 · 148 阅读 · 0 评论 -
leetcode 127. 单词接龙 双向BFS
class Solution {public: typedef struct node{ string str; int cont; }node; map<string,int> mp; int ans1=10000000; void bfs(string beginWord, string endWord...原创 2020-02-18 00:50:49 · 201 阅读 · 0 评论 -
leetcode 124. 二叉树中的最大路径和
/* a / \ b c */class Solution {public: int ans = -100000000; int dfs(TreeNode* root) { if(root == NULL) return 0; int l=max(dfs(root->left),0);//舍去为...原创 2020-02-18 00:45:06 · 108 阅读 · 0 评论 -
leetcode 123. 买卖股票的最佳时机 III
class Solution {public: int dp[111111][2][2]; int maxProfit(vector<int>& prices) { int n=prices.size(); dp[0][0][0]=0; dp[0][0][1]=-100000000; dp[...原创 2020-02-18 00:21:15 · 147 阅读 · 0 评论 -
leetcode 115. 不同的子序列
/* dp[i][j]表示s前i个字符串与t中前j个字符串出的个数 当s[i]==t[j]时: 我们考虑s[i]能不能能不能算进匹配的字符, 如果不包括s[i] dp[i][j]=dp[i-1][j] 如果包括 dp[i][j]=dp[i-1][j-1]*/class Solution {public: typedef long long...原创 2020-02-17 21:53:12 · 116 阅读 · 0 评论 -
leetcode 109. 有序链表转换二叉搜索树
/* 采用快慢指针 slow指针每次都一步 fast指针每次走两步,当fast到达r的位置时候slow为中点 */class Solution {public: TreeNode* dfs(ListNode* l,ListNode* r) { if(l == r) return NULL; ListNode* fa...原创 2020-02-17 20:27:06 · 87 阅读 · 0 评论 -
leetcode 108. 将有序数组转换为二叉搜索树
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */c...原创 2020-02-17 20:09:59 · 170 阅读 · 0 评论 -
leetcode 105. 从前序与中序遍历序列构造二叉树
/* 前中序 */class Solution {public: TreeNode* dfs(vector<int>& preorder,int l1,int r1,vector<int>& inorder,int l2,int r2) { if(l1 > r1 || l2 > r2) ...原创 2020-02-17 20:04:41 · 86 阅读 · 0 评论 -
leetcode 97. 交错字符串
class Solution {public: bool isInterleave(string s1, string s2, string s3) { int n=s1.size(); int m=s2.size(); int k=s3.size(); if(n+m != k) return false; ...原创 2020-02-17 02:00:34 · 109 阅读 · 0 评论 -
leetcode 94. 二叉树的中序遍历
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */cla...原创 2020-02-17 01:13:36 · 91 阅读 · 0 评论 -
leetcode 91. 解码方法
/* dp[i]表示长度为i的方案总数 特殊情况s[i]=='0'*/class Solution {public: int numDecodings(string s) { int n=s.size(); if(s[0]=='0') return 0; vector<int> dp(...原创 2020-02-17 00:00:07 · 133 阅读 · 0 评论 -
leetcode 90. 子集 II
class Solution {public: int n; vector<vector<int>> ans; void dfs(vector<int>& nums,int cur,vector<int>& res) { if(cur == n-1) { ...原创 2020-02-16 23:40:29 · 97 阅读 · 0 评论 -
leetcode 87. 扰乱字符串
class Solution {public: bool dp[111][111][111];//dp[i][j][k]表示s1字符串从i开始k个长度的字符串与s2 //字符串从j开始k个长度的字符串是否匹配 bool isScramble(string s1, string s2) { int n=s...原创 2020-02-16 23:33:34 · 133 阅读 · 0 评论 -
85. 最大矩形
/* 将每一行向上的方向的1的个数作为高就变成了求矩形的最大面积*/class Solution {public: int f(int i,int m,vector<vector<int>> & g) { stack<int> st; st.push(-1); int a...原创 2020-02-16 22:28:53 · 121 阅读 · 0 评论 -
leetcode 84. 柱状图中最大的矩形
/* 单调栈维护一个递增的栈,对于h[i]如果大于栈顶元素就一直压栈 否则,先弹出栈顶元素k,面积=h[k]*(i-1-st.top()); 最后把栈清空,面积=h[k]*(i-1-st.top());这时候的i=n*/class Solution {public: int largestRectangleArea(vector<int>&a...原创 2020-02-16 21:53:22 · 132 阅读 · 0 评论 -
leetcode 82. 删除排序链表中的重复元素 II
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode*...原创 2020-02-16 19:17:59 · 127 阅读 · 0 评论