- 博客(42)
- 收藏
- 关注
原创 【数据结构】常见面试题
写在前面:保研夏令营已经开始了,下周就要开始第一场面试了,于是赶紧整理一下可能会考的知识点数据结构篇树1.二叉树完全二叉树二叉搜索树平衡二叉树红黑树2.哈夫曼编码3.B+树4.Trie树(字典树)5.并查集图图的遍历最小生成树最短路径迪杰斯特拉算法(Dijkstra)弗洛伊德算法(Floyd):拓扑排序链表和数组1.数组和链表的区别2.怎么判断链表是否有环3.怎样合并两个有序链表4.怎样反转链表排序和查找1.有哪些排序算法?时间和空间复杂度?是否稳定?1.快速排序2.选择排序2.哈希是什么解决哈希冲突的
2021-06-21 10:04:09
895
1
原创 【牛客网】下厨房
描述牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。输入描述:每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。输出描述:输出一行一个数字表示完成所有料理需要多少种不同的材料。示例1输入:BUTTER FLOURHONEY FLOUR EGG输出:4再次巩固一下读入多行,以及空格分隔字符串#i
2021-06-16 11:12:42
131
原创 动态规划之最大乘积序列相关题目
好久没写了,上周在复习专业课,这周又要开始练习编程了之前有了一定的力扣基础,开始做有输入输出模式的题目,今天写了一题牛客网上的动态规划题,一眼看出是力扣的152.乘积最大子数组,不过稍作改动,力扣当时是看题目解析的,所以也没有特别掌握,这次印象更加深刻了。给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。152. 乘积最大子数组示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。
2021-06-15 23:08:05
234
2
原创 【力扣练习记录】221.最大正方形
在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。提交了好多次才过,每次都有特别简单的案例没过,好在这题好像数据量不大,真的每次一看到最大矩阵最大矩形最大正方形就头大,什么单调栈动态规划是学不会了只好有点暴力的解法了只击败了5%。。。。class Solution {public:int maxarea=0; int maximalSquare(vector<vector<char>>& matrix) {
2021-06-01 21:36:33
124
原创 【力扣练习记录】2021/5/31
179.最大数给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例 1:输入:nums = [10,2]输出:“210”示例 2:输入:nums = [3,30,34,5,9]输出:“9534330”示例 3:输入:nums = [1]输出:“1”class Solution {public:string res;static bool cmp(int a,int b){
2021-05-31 22:38:58
109
原创 【力扣练习记录】1028.最长等差数列
一看到这题就想起上次很惨的PAT考试的第一题就是和这很类似,结果硬是没有思路,实际比这题还简单(主要是数据量小了很多)所以三重循环在这题不出意外的超时了呜呜呜class Solution {public: int longestArithSeqLength(vector<int>& nums) {//先用两重循环试一试int maxres=0;for(int i=0;i<nums.size()-1;i++){ for(int j=i+1;j<num
2021-05-30 17:18:41
134
原创 【力扣练习记录】368. 最大整除子集
最近做题一直不顺,所以没怎么发文,于是又转战中等难度题做做,主要还是在做动态规划,因为一直不太明白给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足:answer[i] % answer[j] == 0 ,或answer[j] % answer[i] == 0如果存在多个有效解子集,返回其中任何一个均可。示例 1:输入:nums = [1,2,3]输出:[1,2]解释
2021-05-30 11:25:46
154
原创 【力扣练习记录】740. 删除并获得点数
竟然说和打家劫舍是一样的,看了解析的确是这么回事,可惜第一遍没看出来。。。。class Solution {public: int deleteAndEarn(vector<int>& nums) { map<int,int>cnt; int maxn=-1; for(int i=0;i<nums.size();i++){ maxn=max(maxn,nums[i]); cnt[nu
2021-05-30 10:03:04
202
原创 【力扣练习记录】149.直线上最多的点数
好久没做直线的题了,只能说仍然不擅长。。。class Solution {public: int maxPoints(vector<vector<int>>& points) {//如果你要存储每一条直线,也就是要有斜率和截距很麻烦,但是如果是通过每一个点的直线那就可以 //为每一个直线开一个map if (points.size() < 3) { return points.size();
2021-05-28 20:39:42
161
原创 【力扣练习记录】279. 完全平方数
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。示例 1:输入:n = 12输出:3解释:12 = 4 + 4 + 4示例 2:输入:n = 13输出:2解释:13 = 4 + 9提示:
2021-05-28 16:44:59
118
原创 【力扣练习记录】765.情侣牵手
就这还难题???随便瞎写都能通过class Solution {public: int minSwapsCouples(vector<int>& row) { map<int,int>hashtable; int res=0; for(int i=0;i<row.size();i++){ hashtable[row[i]]=i; } for(int i=0;i<row.size()-1;i=i
2021-05-26 19:04:51
105
原创 【力扣练习记录】74.搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int m=matrix.size(); int n=matrix[0].size();
2021-05-23 12:06:09
88
原创 【力扣练习记录】210.课程表(拓扑排序)
现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例 1:输入: 2, [[1,0]]输出: [0,1]解释: 总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为 [0,1] 。
2021-05-23 12:03:09
123
原创 【力扣练习记录】75.颜色分类
使用无比质朴的办法》》》class Solution {public: void sortColors(vector<int>& nums) { int cnt1=0,cnt2=0,cnt3=0; for(int i=0;i<nums.size();i++){ if(nums[i]==0){ cnt1++; } else if(nums[i]==1){ cnt2++;
2021-05-23 10:52:16
118
原创 【力扣练习记录】85.最大矩形
今天终于来做这题了昨天写了84题,据说这题就是84的原理,一看,果然是,在84题的代码基础上外面套个for循环就解决了,仍然是用了单调栈哦class Solution {public: int maximalRectangle(vector<vector<char>>& matrix) { int m = matrix.size(); if (m == 0) { return 0; }
2021-05-23 09:51:28
166
原创 【力扣练习记录】84.柱状图中最大的矩形
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。示例:输入: [2,1,5,6,2,3]输出: 10当时想着就这?还困难?随便就想出来了结果很不幸没有通过全部测试案例因为超时了然后一看案例,魔鬼啊先粘贴一下小白的代码,毕竟用了双重循环,其实就是枚举高和宽,还搞得像dp:class Solution {public
2021-05-22 21:28:01
138
原创 【力扣练习记录】排列组合相关
全排列给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]class Solution {public: void backtrack(vector&.
2021-05-20 22:02:54
241
原创 【力扣练习记录】80. 删除有序数组中的重复项 II
随手记录一下:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。和前面某题差不多,反正还是双指针,不过我加了个flag判断一下class Solution {public: int removeDuplicates(vector<int>& nums) { int i=0,j=1; bool f
2021-05-20 21:20:32
83
原创 【力扣练习记录】45.跳跃游戏2
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。由于一天要写很多道所以懒得发文章了,除了偶尔打败100%用户。。。class Solution {public: int step[1005]; int jump(vector<int>& nums) { for(int i=0;i<nums.size
2021-05-19 20:36:20
159
原创 【力扣练习记录】N皇后
经典的老掉牙的题目不重复题目了,懂得都懂先上一下罗嗦的代码:总之要记得判断对角线:横坐标之差的绝对值等于纵坐标之差的绝对值!!!class Solution {public: int m; bool matrix[10][10]; bool check(int x,int y){ for(int i=0;i<x;i++){ if(matrix[i][y]==true){ return false;
2021-05-18 20:17:07
142
原创 【力扣练习记录】50.Pow(x, n)
快速幂裸题,按照解析根据自己理解写了一遍快速幂代码,结果很不幸的超时了,看了一下答案,感觉意思是差不多的,但是我写的也太啰嗦了吧呜呜呜希望大家不要嘲笑我的菜。。。class Solution {public: double myPow(double x, int n) { if(n==0)return 1; cout<<n%2<<endl; if(n<0){ n=-n; if(n%2==0){ ret
2021-05-18 19:02:35
81
原创 【力扣练习记录】2.两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9], l2 = [
2021-05-18 11:23:00
88
原创 【力扣练习记录】49. 字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。原来的想法是把每一个单词转化成一个数字,然后对应数字的单词分到一组,结果测试用例很无情,数字超过long long长度了,看来此法行不通,于是想到“n年前”在牛
2021-05-17 21:46:58
188
原创 【力扣练习记录】39. 组合总和
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。 示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]示例 2:输入:candidates = [2,3,5], target = 8,
2021-05-17 20:52:44
84
原创 【力扣练习记录】48.旋转图像
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。正常做法:class Solution {public: void rotate(vector<vector<int>>& matrix) { int row=matrix.size(); int col=matrix[0].size();
2021-05-17 20:28:27
70
原创 【力扣练习记录】41.缺失的第一个正数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。进阶:你可以实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案吗?示例 1:输入:nums = [1,2,0]输出:3示例 2:输入:nums = [3,4,-1,1]输出:2示例 3:输入:nums = [7,8,9,11,12]输出:1class Solution {public: int firstMissingPositive(vector<int>& nums
2021-05-16 19:27:42
62
原创 【力扣练习记录】19. 删除链表的倒数第 N 个结点
题目如文章标题所示class Solution {public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* slow=head,*fast=head,*pre=head; if(head->next==NULL)return NULL; int cnt=1; int number=n; while(number--&&fast->
2021-05-12 20:39:12
58
原创 【力扣练习记录】30. 串联所有单词的子串
给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。示例 1:输入:s = “barfoothefoobarman”,words = [“foo”,“bar”]输出:[0,9]解释:从索引 0 和 9 开始的子串分别是 “barfoo” 和 “foobar” 。输出的顺序不重要, [9,0] 也是有效答案。示
2021-05-12 20:16:53
79
原创 【力扣练习记录】142. 环形链表 II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。class Solution {public: ListNode *detectCycle(ListNode *head) { /* 给定两个指针,
2021-04-28 19:48:11
66
原创 【力扣练习记录】20.有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true提示:1 <= s.length
2021-04-26 19:04:51
72
原创 【力扣练习记录】135. 分发糖果
老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入:[1,0,2]输出:5解释:你可以分别给这三个孩子分发 2、1、2 颗糖果。示例 2:输入:[1,2,2]输出:4解释:你可以分别给这三个孩子分发 1、2、1 颗糖果。第三个孩子只得到 1 颗糖果
2021-04-25 21:27:13
93
原创 【力扣练习记录】605. 种花问题
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。示例 1:输入:flowerbed = [1,0,0,0,1], n = 1输出:true示例 2:输入:flowerbed = [1,0,0,0,1],
2021-04-25 20:55:25
66
原创 【力扣练习记录】455. 分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,
2021-04-25 19:55:48
68
原创 【蓝桥杯练习】算法提高 贪吃的大嘴
问题描述 给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个.输入格式 输入的第一行包含两个整数n, m,分别表示物品的个数和背包能装重量。 以后N行每行两个数Wi和Vi,表示物品的重量和价值输出格式 输出1行,包含一个整数,表示最大价值。样例输入3 52 33 54 7样例输出8数据规模和约定 1<=N<=200,M<=5000.虽然题目给的对应知识点是动态规划,但是数据量看起来不
2021-04-16 10:05:09
347
原创 【蓝桥杯练习记录】网络寻路
问题描述X 国的一个网络使用若干条线路连接若干个节点。节点间的通信是双向的。某重要数据包,为了安全起见,必须恰好被转发两次到达目的地。该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径。源地址和目标地址可以相同,但中间节点必须不同。如下图所示的网络。输入格式输入数据的第一行为两个整数N M,分别表示节点个数和连接线路的条数(1<=N<=10000; 0<=M<=100000)。接下去有M行,每行为两个整数 u 和 v,表示节点u 和 v 联通(1&
2021-04-11 22:44:05
230
原创 【蓝桥杯练习】算法提高 统计单词数
问题描述 统计输入英文文章段落中不同单词(单词有大小写之分, 但统计时忽略大小写)各自出现的次数。 输入段落中所含单词的总数不超过100,最长单词的长度不超过20个字母.输入格式 一个包含若干句子的段落, 每个句子由若干英文单词组成. 除空格, 逗号和句号外, 这些输入的句子中不含其他非字母字符, 并且, 逗号和句号紧跟在它前面的英文单词后面, 中间没有空格. 段落最后一个字符是回车符, 表示输入结束.输出格式 若段落中共有M个不同的英文单词,则按照其在段落中出现的先后顺序输出M行,各
2021-04-11 18:39:53
239
原创 【蓝桥杯练习】日期问题整理
类型一:给定某个日期问你是周几?使用基姆拉尔森计算公式非常简单就能得到,且不易出错void CaculateWeekDay(int y,int m, int d){ if(m==1||m==2) { m+=12; y--; } //使用基姆拉尔森计算公式 int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; switch(iWeek) { case 0: printf("星期一\n"); break; case 1: printf("
2021-04-11 17:16:13
295
原创 【PAT甲级练习记录】PAT1148 Werewolf - Simple Version (20 分)
日期:2021/03/16 周二晚用时:50分钟题目:Werewolf(狼人杀) is a game in which the players are partitioned into two parties: the werewolves and the human beings. Suppose that in a game,player #1 said: "Player #2 is a werewolf.";player #2 said: "Player #3 is a human.";
2021-04-11 16:03:25
117
原创 【2021/04/09练习】蓝桥杯历届试题数字游戏
问题描述 栋栋正在和同学们玩一个数字游戏。游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈。栋栋首先说出数字1。接下来,坐在栋栋左手边的同学要说下一个数字2。再下面的一个同学要从上一个同学说的数字往下数两个数说出来,也就是说4。下一个同学要往下数三个数,说7。依次类推。为了使数字不至于太大,栋栋和同学们约定,当在心中数到 k-1 时,下一个数字从0开始数。例如,当k=13时,栋栋和同学们报出的前几个数依次为: 1, 2, 4, 7, 11, 3, 9, 3, 11, 7。游戏进行了一会儿,
2021-04-11 16:02:50
131
原创 【力扣练习】整数拆分/同剪绳子
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。(无比基础的深搜)class Solution {public: int res=0; int total; void df
2021-04-09 20:35:18
82
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人