自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

algsup

记录自己的成长。

  • 博客(75)
  • 收藏
  • 关注

原创 [树状数组]leetcode315:计算右侧小于当前元素的个数(hard)

题目:题解:1)从后往前依次取出数字去排序2)使用二分查找找到新的数字排在第几位,就是比几个数字大3)然后将这个数字插入到该位置代码如下:class Solution {public: //思路:由后到前取出数字去排序,利用二分查找到的位置就是该元素右侧比它小的元素的数量,然后再将这个数字插到该位置 vector<int> countSmalle...

2019-11-30 15:45:30 339

原创 [链表]leetcode25:K个一组翻转链表(hard)

题目:题解:主要利用了递归的思想,我们将[a.b)范围内k个节点的链表翻转,然后a节点就是翻转后链表的尾节点需要链接剩下的链表节点[b,tail),注意对于区间范围不足k个节点的,不需要进行翻转。代码如下:class Solution {public: ListNode* reverseKGroup(ListNode* head, int k) { if(...

2019-11-30 15:12:32 507 3

原创 [链表][双指针]leetcode86:分隔链表(medium)

题目:题解:双指针法before链表用来存放比x小的节点,after节点用来存放比x大的节点。注意要设置头节点,因为这样可以减少判断条件。代码如下:class Solution {public: //双指针法,before链表存放比x小的节点,after存放比x大的节点 ListNode* partition(ListNode* head, int x) {...

2019-11-30 11:10:04 1146

原创 C++:树状数组模板

前言:昨日学习了一波树状数组,学习好了算法步骤和原理后,自己写了C++的板子,大家可复制粘贴使用即可。树状数组:是一种用于高效处理对一个存储数字的列表进行更新及求前缀和的数据结构。关于树状数组的算法步骤:树状数组(Binary Indexed Tree),看这一篇就够了,大家看这篇就好了。树状数组模板:#include <iostream>#include <vect...

2019-11-30 10:24:40 711

原创 [树状数组]leetcode307:区域和检索 - 数组可修改(medium)

题目:题解:题解1:暴力法题解2:树状数组题解1:class NumArray{private: vector<int> nums;public: NumArray(vector<int>& nums) { this->nums=nums; } void update(int i...

2019-11-30 10:03:37 209

原创 [mysql]leetcode596:超过5名学生的课(easy)

题目:596.超过5名学生的课题解:直接对课表中的class进行分组,用having进行分组过滤,过滤的条件是学生的数量大于等于5,注意要使用distinct,因为学生的课不能重复。代码如下:# Write your MySQL query statement belowselect class from courses group by class having count(...

2019-11-28 21:18:10 188

原创 [mysql]leetcode595:大国家(easy)

题目:题解:送分题,很简单的代码如下:# Write your MySQL query statement belowselect name,population,area from Worldwhere area>3000000 or population >25000000;

2019-11-28 20:39:48 167

原创 mysql:查询N个连续出现的数字

前言:前面刚做的180.连续出现的数字是查询3个连续出现的数字,倘若要查询连续出现4,5…N个数字呢?当然这个问题肯定使用解决方法的,也可以说是模板。解决方法:1)找规律:我们发现连续的数字是相同的数字,但是id有可能不是连续的,我们就需要通过对结果集进行再次编号,让其变成连续的。原始数据表如下:2)我们需要使用row_number()来对id进行升序排序,sql语句如下:...

2019-11-28 20:33:05 6606 2

原创 [mysql]leetcode180:连续出现的数字(medium)

题目:题解:题解1:由于只需要检索至少连续出现三次的数字,所以我们暴力求解即可,也就是id连续,且num相同。题解2:直接套用查询连续出现N次数字即可。题解1的代码如下:# Write your MySQL query statement below-- 解法1:暴力法,直接查询连续出现三次的数字,也就是id连续,且num相同SELECT DISTINCT l...

2019-11-28 19:05:03 537

原创 [mysql]leetcode178:分数排名(medium)

题目:178.分数排名题解:本题的难点是给出分数如何算它排名呢?我们可以先提取出大于等于x(某个分数)的所有分数集合H,将H去重后的元素个数就是x的排名。比如a表的x为3.50,b表中大于等于3.50的不重复分数有4个,所以排名为4。代码如下:-- 建立两个分数表a,b-- a表用来查询分数,b表用来设置排名-- b表分数大于等于a表某个分数的个数就是排名,比如a表的3...

2019-11-28 11:13:46 345

原创 [mysql]leetcode177:第N高的薪水(medium)

题目:177. 第N高的薪水题解:将 Salary 去重并从低到高排序,要求返回第n高,用limit语法返回limit n-1,1即可,可能存在null,用临时表查询即可。代码如下:-- create function创建mysql函数-- returns int表示返回类型为int-- begin:函数开始 end:函数结束-- set n=N-1:在函数内部设置n等...

2019-11-28 10:46:19 259

原创 [mysql]leetcode176:第二高的薪水(easy)

题目:题解:简单sql查询,直接看代码即可代码如下:# Write your MySQL query statement below-- ifnull:判断第一个表达式是否为null,如果为null,则返回第二个参数的值,如果不为null则返回第一个参数的值-- distinct Salary:不同的薪水-- order by Salary desc:薪水降序排序-- l...

2019-11-28 10:06:13 182

原创 [数组]leetcode31:下一个排列(medium)

题目:题解:题解1:直接调用STL算法next_permutation即可题解2:手动实现STL算法next_permutation代码如下:class Solution {public: //题解1:直接调用STL算法 void nextPermutation_1(vector<int>& nums) { next_permut...

2019-11-27 23:41:18 195

原创 [二分法]leetcode35:搜索插入位置(easy)

题目:题解:题解1:直接遍历数组寻找第一个大于等于target的数组元素下标题解2:二分法模板一。找到第一个大于等于target的值,right指向的值肯定大于target,最后结束的条件是left=right+1,也就是left指向的元素是第一个大于等于target的值。题解:class Solution {public: //解法1:暴力法 int sea...

2019-11-27 23:20:51 167

原创 leetcode刷题总结之回溯法

前言:好久没写总结了,总感觉心里空空的。回溯法是看labuladong的详解回溯法入的门,然后看了《计算机算法设计与分析》第5章的回溯法部分弄清了原理,今日总结一下,供以后复习用。回溯法的定义:回溯法有通用解法的美称,对于很多问题,如迷宫等都有很好的效果。回溯法实际就是对问题的解空间树采用深度优先搜索的方式,搜索需要解决问题的任一解或者所有解,它是一个既带系统性又带跳跃性的搜索算法。回...

2019-11-27 22:02:44 3436

原创 [数组][对角线交换]leetcode48:翻转图像(medium)

题目:48. 旋转图像题解:解法1:找规律转换图像的本质就是着四个点(i,j) , (j, n-i-1), (n-i-1, n-j-1), (n -j-1, i)在两两交换,这里需要注意一下需要旋转的层数为n/2就好了。解法2:翻转旋转图像的本质就是先沿水平对角线翻转,然后再沿正对角线翻转,就得到最后结果了。代码如下:class Solution {publi...

2019-11-26 21:08:52 786

原创 [分治法][动态规划]leetcode312:戳气球(hard)

题目:题解:题解1:分治法每次选的第k个球用来最后戳爆,然后根据k的位置划分左右区间,分别求解,最后区间只有一个值时,子问题解决,那么总问题也解决了。题解2:动态规划其实和分治法一样的算法思路,只不过通过迭代实现罢了。dp[i][j] 表示戳破 [i+1…j-1] 号气球的最大收益代码如下:class Solution {public: //解法1:分治法...

2019-11-26 20:55:58 442

原创 C语言:传递二维数组参数(固定维度和不固定维度两种)

前言:今日做一道dp的题,然后需要二维dp,我本人觉得用vector的二维数组会耗时长(毕竟类对象,肯定比基本数组类型的二维数组慢),所以打算使用int dp[][],然而遇到点麻烦,先记录如下。二维数组的定义:二维数组的说法是不准确的,因为C/C++都不存在二维数组的数据结构,只不过一些入门教程为了让初学者快速理解产生的名词,所以在C/C++仅存在数组的数组的说法。二维数组的地址存储方式...

2019-11-26 19:59:49 5374

原创 [双指针]leetcode11:盛最多水的容器(medium)

题目:题解:双指针,i与j之间间距每次乘以较小值,防止水溢出代码如下:class Solution {public: //思路:双指针,i与j之间间距每次乘以较小值,防止水溢出 int maxArea(vector<int>& height) { int i=0,j=height.size()-1,result=0; ...

2019-11-25 20:04:39 224 1

原创 [字符串]leetcode6:Z 字形变换(medium)

题目:6. Z 字形变换题解:规律题可以观察到到Z字形字符串对应原始字符串的下标是由左上至右下递增的,所以我们需要模拟这个行索引的变化,在遍历 s 中把每个字符填到正确的行record[i]。遍历字符串:1)record[i]+=c:表示将字符c添加到对应的行2)i+=flag:表示更新下一个字符对应的行号3)flag=-flag:表示在达到Z字形转折点时,执行反向4)推...

2019-11-25 19:46:56 242

原创 [双指针]leetcode16:最接近的三数之和(medium)

题目:题解:双指针与15.三数之和方法类似,简单来说会了三数之和,那么这题也就会了。代码如下:class Solution {public: int threeSumClosest(vector<int>& nums, int target) { if(nums.size()<3)return -1; sort...

2019-11-25 16:58:19 155

原创 [双指针]leetcode18:四数之和(medium)

题目:题解:双指针本题在15.三数之和的基础上加了一层循环罢了,时间复杂度变为O(n3)了。代码如下:class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { sort(nums.begin(),n...

2019-11-25 16:42:16 164

原创 [双指针]leetcode15:三数之和(medium)

代码】[双指针]leetcode15三数之和(medium)

2019-11-25 16:17:06 1328

原创 [字符串][数学]leetcode8:字符串转换整数 (atoi) (medium)

题目:8. 字符串转换整数 (atoi)题解:题解1:利用istringstream将str的第一个单词读取到res中:若第一个单词为string则读取不成功,res为0;若超过int范围,res为最大值或最小值;其他情况,读取成功。题解2:常规解法,看代码就好了,因为没有遇到具体的算法点。代码如下:class Solution {public: //解法1:利...

2019-11-25 15:31:45 205

原创 [数学][双指针]leetcode9:回文数(easy)

题目:题解:题解1:双指针将数字转换为字符串,然后利用首尾指针向字符串中间走,若首尾指针所指的字符不想等,则返回false,否则最后left==rigth,那么就是回文数了。题解2:数学首先排除负数,因为负数一看就不是回文数。然后将数字x的尾数字依次添加到cur后面,最后判断x是否等于cur,具体看代码。代码如下:class Solution {public: /...

2019-11-24 17:31:33 356

原创 [前缀树]leetcode5237:搜索推荐系统(medium)

题目:5273. 搜索推荐系统题解:题解一:前缀树将前缀树的板子贴过来,然后修修改改就行了。题解二:暴力法先将products排序,然后寻找searchWord的所有前缀,如"m", "mo", "mou", "mous", "mouse",每个前缀寻找products前三个单词就行了,或者不足三个也行。代码如下:class Trie{private: ...

2019-11-24 16:44:01 222

原创 [数组]leetcode5272:统计参与通信的服务器(medium)

题目:5272.统计参与通信的服务器题解:暴力题:因为没有用到一点点算法,就是阅读理解题。。思路一:遍历数组,若找到一个服务器,然后判断同行同列是否还存在服务器,若存在则此服务器可以参与通信思路二:分别统计每个服务器的行与列的数字和,若单个服务器的行与列的数字和都为1,那么这个服务器就不能通信代码如下:class Solution {public: //思路一:...

2019-11-24 16:32:42 318

原创 [回溯法]leetcode282:给表达式添加运算符(hard)

题目:282.给表达式添加运算符题解:回溯法本题最难最难的就是处理乘法了,由于乘法的优先级比加、减法高,所以在遇到乘号时需要回退到上一步,然后将上一步的操作数与乘法进行运算。比如:num = “232”,target = 8,在计算完2+3=5后,我们在3后面添加*2,然而*的优先级高,所以我们需要返回到上一步val(5)-mult(3)=2,然后计算上一步的结果与乘法运算的结果2...

2019-11-24 00:05:12 398

原创 [除法转换为减法]leetcode29:两数相除(medium)

题目:题解:题解1:作弊法,排除溢出情况后,直接返回两数相除的结果题解2:减法,计算被除数能减去除数的个数比如[15,3],若被除数15每次减除数3,需要减5次。那么请思考如何简化呢?答案:将除数每次都翻倍,直到除数大于被除数时,将除数还原为初始值。比如第一次[15,3](这里减了一个除数,result+=1),第二次就变为[12,6](这里减了两个除数,result+=2...

2019-11-23 16:22:41 1938

原创 [分治法]leetcode241:为运算表达式设计优先级(medium)

题目:题解:分治法代码如下:class Solution {private: map<pair<int,int>,vector<int>> m;public: vector<int> diffWaysToCompute(string input){ return ways(input,0,inp...

2019-11-23 11:25:35 283

原创 C++:浅析STL之priority_queue构建大根堆与小根堆

前言:今日刷题用priority_queue<int,vector<int>>来构建堆,然后加了一个函数对象greater<int>,然后把大根堆和大根堆搞错了。需要使用的头文件:#include <queue>优先队列的定义:它允许用户为队列中元素设置优先级,放置元素的时候不是直接放到队尾,而是放置到比它优先级低的元素前面,标准库默...

2019-11-22 21:27:47 15112 1

原创 记录C++编译的两个坑点(链接错误):模板不支持分离编译与main.cpp不能调用另一个cpp文件

结论如下:1)使用模板的cpp文件实现不能分离编译,也就是模板的声明和实现都要在同一个.h文件中,然后.cpp文件调用就好了。如果非要分离编译,就会导致链接错误了。2)main.cpp不允许直接去调用另一个.cpp文件,这样也会导致链接错误。因为A.cpp(include "B.cpp" )在预处理阶段会将B.cpp的代码引用进去,并且编译器也会单独预处理B.cpp,然后A.cpp与B....

2019-11-22 19:29:27 619 3

原创 [堆]leetcode215:数组中的第K个最大元素(medium)

题目:题解:题解1:STL算法题解2:维持一个大小为k的小根堆,堆顶元素就是数组中第k个最大的元素代码如下:class Solution {public: //题解1:利用sort排序直接返回第k大的元素 int findKthLargest_1(vector<int>& nums, int k) { sort(nums.b...

2019-11-22 15:07:50 281

原创 [扫描线]leetcode218:天际线问题(hard)

题目:218.天际线问题题解:扫描线(参考大佬的做法,真的很巧妙)使用扫描线,从左至右扫过。如果遇到左端点,将高度入堆,如果遇到右端点,则将高度从堆中删除。使用prev表示堆上一次的最大高度,cur表示堆的当前最大高度。1)将每一个建筑分成“两个部分”,例如:[2,9,10]可以转换成[2,-10][9,10],我们用负值来表示左边界2)根据x值对分段进行排序:先比较 firs...

2019-11-22 08:44:22 656 3

原创 [链表][分治法]leetcode23:合并K个排序链表(hard)

题目:题解:题解1:分治法k个链表利用二分为k个独立的子链表,然后两两组合,最后合并成k个排序链表时间复杂度:O(nlogk),n为单个链表的长度,k表示k个链表题解2:优雅的暴力法利用队列queue来实现两两链表的组合,首先将队列前两个链表合并成一个,然后添加到队列的尾部,直到队列中只有一个链表时,表示k个链表已经合成了。合并两个有序链表的代码可以参考:21.合并...

2019-11-21 15:42:46 819

原创 MySql:where和on之间的区别

前言:今日学习mysql连接查询,然后突然看到关键字on,不明白是啥意思。然后在网上查询和二哥的帮助下,了解了一些原因,记录如下。where与on之间的区别:1)on后面的是连接(join)条件,代表两个表建立关系所遵循的规则2)where后面的可以看作是筛选条件,是对最终结果集进行过滤所遵循的规则思考:在连接(join)两个表时可以不可以使用where字句呢?答案是肯定的...

2019-11-20 22:33:28 2357

原创 [回溯]leetcode93:复原IP地址(medium)

题目:题解:回溯法:ip地址有三个点,分为四段,每段的数字范围必须在[0,255]内,注意0只能作为单独一个段,比如:0.0.0.124变量介绍:flag来表示4个段,track表示决策路径(也就是可生成的ip地址),其他变量大家看代码就懂了。代码如下:class Solution {public: vector<string> restoreIpAddr...

2019-11-20 15:18:38 322 1

原创 计算机网络:IP分类以及地址的范围

前言:今日做93.复原IP地址这题,对于上学期学过的计网差不多都忘了,现查询相关资料,记录一下。IP地址的分类:IP地址分为A类、B类、C类、D类、E类,规定如下(其中A类、B类、C类IP地址可供普通用户使用):A类:网络位8位,主机位24位,网络前导位为0,表示的范围:1.0.0.0—127.255.255.255。注意:网络位00000000不可用,网络位01111111(127)表...

2019-11-19 21:51:47 8787 1

原创 [字符串]leetcode316:去除重复字符(hard)

题目:题解:1)建立两个表:count表示字符表,uesd用记录字符是否已添加的表2)第一遍遍历字符串,用来建立字符表3)第二遍遍历字符串,用来生成无重复字符串4)相关注解已给,有什么不懂的欢迎交流代码如下:class Solution {public: //count表示字符表,used用来记录已经添加过的字符 string removeDuplicateL...

2019-11-19 21:17:35 970

原创 [字符串]leetcode273:整数转换英文表示(hard)

题目:273.整数转换英文表示题解:1)将数组分为三组,第一组为那些大单位(“Billion”, “Million”, “Thousand”),第二组为20-90之间整数值的单位(“Twenty”, “Thirty”, “Forty”, “Fifty”, “Sixty”, “Seventy”, “Eighty”, “Ninety”),第三组为0-19之间的小单位数字(“Zero”, ...

2019-11-19 17:03:31 254

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除