
LeetCode && 基础算法总结
本专栏是本人刷LeetCode时候,分类提炼出来的知识点并加以总结。希望对你有所帮助。
Soar-
这个作者很懒,什么都没留下…
展开
-
SQL
select P.FirstName,P.LastName,A.City,A.StateFROM Person P left join Address A ON P.personId = A.personId;//第二高薪水SELECT IFNULL( (SELECT DISTINCT SalaryFROM Employeeorder by Salary DESC limit 1,1),NULL ) as 'SecondHighestSal.原创 2020-06-04 19:53:13 · 255 阅读 · 0 评论 -
LeetCode---背包问题
LeetCode上没有背包基本模型题,有几个简单的背包类的题,这里总结一下 。目录416. 分割等和子集322. 零钱兑换518. 零钱兑换 II416. 分割等和子集给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5,...原创 2020-04-28 15:45:37 · 249 阅读 · 0 评论 -
Leetcode---并查集
简介 并查集是一种数据结构,一般它处理的是图(其实是解决无向图的)的连通分量问题,但是当并查集的根节点可以维护更多的信息时,并查集可以解决范围更广的基于无向图连通分量的问题。做了这么多并查集的题目后,我感觉并查集就是解决有关物与物之间的关系问题的数据结构且这种关系还必须是可传递的关系,所以一般遇到这种问题可以先尝试用并查集解决。并查集操作比较简单,主要是理解...原创 2020-04-26 21:41:19 · 385 阅读 · 1 评论 -
LeetCode---二叉树
二叉树是数据结构的基础,本文对LeetCode上的一些题型做一个总结目录一、遍历二、根据遍历去求一些东西一、遍历遍历分为 递归遍历、非递归遍历、以及O(1)空间实现遍历(Morris); 以及层次遍历。94. 二叉树的中序遍历/** * Definition for a binary tree node. * struct TreeNode { * ...原创 2020-04-18 17:16:17 · 192 阅读 · 0 评论 -
LeetCode---全排列(递归、next_permutation、康托展开)
目录一、递归求全排列二、next_permutation实现三、康托展开一、递归求全排列46. 全排列class Solution { vector<vector<int>> ans; public: vector<vector<int>> permute(vector<int>&...原创 2020-04-15 19:57:13 · 358 阅读 · 0 评论 -
LeetCode---链表
目录一、反转链表 类型二、双指针类型三、链表合并类型四、链表排序一、反转链表 类型206. 反转链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : va...原创 2020-04-12 15:43:00 · 214 阅读 · 0 评论 -
LeetCode---数位DP
简介数位DP是一种计数的DP,一般就是要统计一个区间[l,r]内满足一些条件的个数。所谓数位DP, 意思就是在数位(个位,十位,百位,,,)上进行DP。对于这种问题的求解思路:先得出解ans[x]([1,x]区间内满足条件的个数)的方法,利用前缀和的思路,最终的解为ans[r] - ans[l-1]。问题的关键是:怎么求ans[x]?我们采用枚举的方式,控制上界枚举,从最高位开始往...原创 2020-03-29 18:37:17 · 1216 阅读 · 0 评论 -
LeetCode---区间DP
简介:区间DP在leetcode上也有体现(主要是合并石子类型),本文就leetcode上出现的区间DP做一个总结。题目原型:5301 石子合并 0x50「动态规划」例题描述设有N堆沙子排成一排,其编号为1,2,3,…,N(N<=300)。每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆,每次只能合并相邻的两堆,合并的代价为这两堆沙子的数量...原创 2020-03-29 15:32:37 · 1097 阅读 · 0 评论 -
康托展开和逆康托展开
简述康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩。设有n个数(1,2,3,4,…,n),可以有组成n!种的排列组合,康托展开表示的就是是当前排列组合在n个不同元素的全排列中的名次。原理X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0!其中ai表示第i个元素在未出现的元素中排第几...原创 2020-03-16 23:59:16 · 174 阅读 · 0 评论 -
LeetCode---双指针
文章目录1.有序数组问题1.1 [leetcode 15. 三数之和](https://leetcode-cn.com/problems/3sum/)1.2 [16. 最接近的三数之和](https://leetcode-cn.com/problems/3sum-closest/)1.3 [18. 四数之和](https://leetcode-cn.com/problems/4sum/)1.4 [...原创 2020-03-01 21:15:33 · 167 阅读 · 0 评论 -
LeetCode 1125. 最小的必要团队 (可重覆盖,舞蹈链)
1125. 最小的必要团队作为项目经理,你规划了一份需求的技能清单req_skills,并打算从备选人员名单people中选出些人组成一个「必要团队」( 编号为i的备选人员people[i]含有一份该备选人员掌握的技能列表)。所谓「必要团队」,就是在这个团队中,对于所需求的技能列表req_skills 中列出的每项技能,团队中至少有一名成员已经掌握。我们可以用每个人的编...原创 2019-08-14 19:34:09 · 489 阅读 · 0 评论 -
LeetCode 126. 单词接龙 II (最短路 dijkstra算法)
给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回一个空列表。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 begi...原创 2019-08-18 19:55:02 · 707 阅读 · 2 评论 -
Manaher算法
Manacher算法Manacher算法能够在O(N)的时间复杂度内得到一个字符串以任意位置为中心的回文字符串。算法的基本原理是:利用已知的左半部分去推右半部分。令rad[i] 表示:第i个字符的回文半径,即rad[i]尽可能大。且满足s[i – rad[i] ,i-1] = s[i+1...原创 2019-06-03 00:02:36 · 293 阅读 · 0 评论 -
LeetCode 813. 最大平均值和的分组
813. 最大平均值和的分组我们将给定的数组A分成K个相邻的非空子数组 ,我们的分数由每个子数组内的平均值的总和构成。计算我们所能得到的最大分数是多少。注意我们必须使用 A 数组中的每一个数进行分组,并且分数不一定需要是整数。示例:输入:A = [9,1,2,3,9]K = 3输出: 20解释:A 的最优分组是[9], [1, 2, 3], [9]. 得到...原创 2019-08-08 16:04:46 · 241 阅读 · 0 评论 -
LeetCode刷题总结---二分查找
LeetCode 刷题总结(二分查找)二分主要是形成自己的代码风格就可以了。常用两种风格(现在偏向于风格一实现了):LeetCode35. 搜索插入位置:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。这个实际上就是手动实现lower_bound()函数(返回值为:在不破坏排序状态的原则下,可插入value的第一个位置...原创 2019-03-16 23:20:44 · 192 阅读 · 0 评论 -
剑指Offer 刷题总结
先把代码给出来,感觉题目都还好,主要是透过题目看清后面的基础知识点,进行延伸。比如求全排列,是不是只会dfs去搜就好了,是不是要了解下next_permutation背后的原理?比如求1-n有多少个1,虽然可以用数学推出,但是我们是不是可以了解下数位DP的知识?碰到Top K 问题我们是不是可以总结下快排?堆?说到排序,是否牢记于心各个排序的特点?数组中重复的数字class Solut...原创 2019-03-17 18:18:49 · 524 阅读 · 0 评论 -
两个有序数组的Top K问题
问题介绍这是个超级超级经典的分治算法!!这个问题大致是说,如何在给定的两个有序数组里面找其中的中值,或者变形问题,如何在2个有序数组数组中查找Top K的值(Top K的问题可以转换成求第k个元素的问题)。这个算法在很多实际应用中都会用到,特别是在当前大数据的背景下。我觉得下面的这个思路特别好,特别容易理解!!请按顺序看。是来自leetcode上的stellari英文答案,我整理并自己修改...原创 2019-04-03 15:22:41 · 1843 阅读 · 0 评论 -
LeetCode --- 动态规划(二)
132. 分割回文串 II给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回符合要求的最少分割次数。示例:输入: "aab"输出: 1解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。分析: 定义状态dp[i]表示分割字符串str[0,i]最少需要分割多少次。状态转移:j位于0~i之间,如果str[j...原创 2019-06-13 12:19:49 · 425 阅读 · 0 评论 -
LeetCode 买卖股票的最佳时机 (动态规划)
121. 买卖股票的最佳时机class Solution {public: int maxProfit(vector<int>& a) { int n = a.size(); if(!n)return 0; int _min = a[0]; int ans = INT_M...原创 2019-06-13 17:35:28 · 415 阅读 · 0 评论 -
LeetCode---蓄水池抽样算法
面试的时候被问到这个问题了,一脸懵逼。 问题:从n个元素中随机抽取k个元素,其中N无法确定。 解法:我们总是选择第一个对象,以1/2的概率选择第二个,以1/3的概率选择第三个,以此类推,以1/m的概率选择第m个对象。当该过程结束时,每一个对象具有相同的选中概率,即1/n,证明如下。 证明:第m个对象最终被选中的概率P=选择m的概率*其后面所有对象不被选择的概率,即...原创 2019-06-14 14:17:16 · 2961 阅读 · 0 评论 -
LeetCode --- 动态规划(一)
LeetCode前200道题中的动态规划10. 正则表达式匹配比较难的一道动态规划,给出两种方法。当前位置不是*比较容易,是*的时候要考虑可以不用前面的符号和用多次的问题。class Solution {public: bool match(char* str, char* pattern) { int m = strlen(s...原创 2019-06-11 23:20:46 · 281 阅读 · 0 评论 -
单调栈总结
LeetCode上有几道单调栈的类型题,这里拿出来总结一下下。单调栈的引入常常是这样一道题:LeetCode84. 柱状图中最大的矩形:class Solution {public: int largestRectangleArea(vector<int>& h) { int n = h.size(); ...原创 2019-06-12 01:05:48 · 254 阅读 · 0 评论 -
LeetCode---尺取法
POJ 3061题意:给出长度为n的数列整数以及整数S。求出总和不小于S的连续子序列的长度的最小值。如果解不存在,则输出#include<cstdio>#include<iostream>#include<algorithm>using namespace std;#define rep(i,a,n) for (int i=...原创 2019-06-28 15:04:37 · 219 阅读 · 0 评论 -
HDU---1043 POJ 1077 Eight 八数码问题 广度优先搜索 康拓展开
问题:很经典的搜索,给定一个3*3的方格,里面放1-8个数字,有一个空格,空位可以与相邻的数字可以移到空格中,问给定一个状态,怎么移动到一个特定的状态(比如1-8顺序存放)。康拓展开记录当前的状态,BFS即可。HDU 1043是让给定多组状态,怎么还原成1-8顺序存放,可以倒叙BFS,打标出所有状态,POJ 1077是一组数据,直接正向搜索即可。思考:A*怎么解决这道题...原创 2019-07-28 18:01:11 · 200 阅读 · 0 评论 -
Sudoku POJ - 2676 (数独,搜索,位运算优化)
问题描述:给定一个由3*3的方块分割而成的9*9的格子。其中一些格子中填有1~9的数字,其余格子则是空白的。请在空白的的格子填入1~9的数字,使得在每行、每列和每个3*3的方块中,1~9的每个数字都恰好出现一次。row[i]的二进制代表当前行的状态,如果当前位为1说明该行还没放该数,比如当前row是4,说明数字3还没放,3说明数字1,2还没放。col[i],grid[i][j]...原创 2019-07-28 21:04:44 · 289 阅读 · 0 评论 -
LeetCode 51 ---- N皇后 (搜索,二进制优化)
51. N皇后和数独类似,用二进制记录状态去搜索,变量list记录当前列中存放情况,如果当前位为1 说明 当前数字存放了,否则反之,比如:5代表0个和第2个数字存放了(从0开始)。同理:变量left记录左斜线,变量right记录右斜线。class Solution {public: int list,left,right; int queen[111]...原创 2019-07-28 21:36:18 · 140 阅读 · 0 评论 -
LeetCode 148. 排序链表
在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5归并这里我感觉有点不符合题意(不符合常数空间)。如果是快排...原创 2019-03-15 20:00:25 · 95 阅读 · 0 评论