![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
工作刷题
xiexie1357
这个作者很懒,什么都没留下…
展开
-
2148. 元素计数【力扣】
题意理解给定一个数组,找出任何一个数,存在一个严格大于这个数的数和一个严格小于这个数的数,统计这个数的数量问题分析模拟法先排序,再遍历每个数,只要不等于最大值和最小值就算一个O(N)其他此题思路容易被限制到排序,快排、选择、堆之类的。这题就是找出数,然后检查。思路不能被限制了。每一题都需要用空杯心态来解决。力扣链接class Solution {public: int countElements(vector<int>& nums)原创 2022-01-25 09:20:24 · 333 阅读 · 0 评论 -
89. 格雷编码【力扣】
题意理解给定一个整数,求出一个满足格雷编码的序列,序列长度2^(n-1)问题分析用回溯,剪枝。卡点有3个:1.是怎么对某一位取反。答案是异或+左移;2.怎么用回溯,保存一个当前结果的序列vector,当前序列和结果序列分开;3.怎么剪枝,当得到正确答案,直接跳出循环。设置一个flag标志位。其他这题做了一天。回溯是我的弱项,还是有些点有点卡,不过下次更好的。链接力扣class Solution {public: vector<int> grayCo原创 2022-01-08 22:28:09 · 408 阅读 · 0 评论 -
剑指 Offer 51. 数组中的逆序对【力扣】
题意理解给定一个数组,计算逆序对的个数问题分析用归并归并和逆序怎么关联?每次两个有序序列合并,对于左边的最小值放入最后序列的适合,最后序列左边的,比它小的,都是和逆序关系。问题转化为计算左边最小值放入最后序列时,右边序列已处理的元素个数。其他力扣链接class Solution {public: int mergeSort(vector<int>& nums, vector<int>& tmps, int l, int h)原创 2021-10-17 22:26:51 · 146 阅读 · 0 评论 -
剑指 Offer 44. 数字序列中某一位的数字【力扣】
题意理解给定一串连续数字连接起来的字符串,判断第n位数字是几?问题分析模拟法先判断是几位数,然后判断是那个数,最后判断数的第几位。其他难就难在怎么条件判断!力扣链接class Solution {public: int findNthDigit(int n) { if (n < 10) return n; int digit = 1; int start = 1; long long ind原创 2021-10-17 22:21:09 · 103 阅读 · 0 评论 -
剑指 Offer 43. 1~n 整数中 1 出现的次数【力扣】
题意链接给定一个数n,求1到n这些数中1出现的次数。问题分析动规有点难,问题转化为每一个位出现的次数。其他链接class Solution {public: int countDigitOne(int n) { long long i = 1, coef = 1, sum = 0, cur_sum = 0; if (n < 10) return 1; while(coef <= n) {原创 2021-10-17 11:52:22 · 87 阅读 · 0 评论 -
剑指 Offer 37. 序列化二叉树【力扣】*
题意理解给定一个二叉树,将它序列化出一个字符串,再反向生成原来的二叉树问题分析设计字符串间隔,外加上叶子节点左右空子树的标志。其他之前做出来过,现在又不会了。说明挺难的链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(原创 2021-10-16 19:58:57 · 58 阅读 · 0 评论 -
剑指 Offer 67. 把字符串转换成整数【力扣】
题意理解给定一个字符串,按照规则转换成整数,如果大于INT_MAX,设置为INT_MAX;如果小于INT_MIN,设置为INT_MIN;如果不是整数,设置成0问题分析自动状态机+整数边界判断。其他链接class Solution {public: int strToInt(string str) { enum STATUS_TYPE { START, ONE, TWO,..原创 2021-10-13 23:50:50 · 74 阅读 · 0 评论 -
剑指 Offer 20. 表示数值的字符串【力扣】
题意理解给定一个字符串,指定数值的格式规范,判断字符串是不是一个数值。问题分析用自动状态机,最难的是设计状态和状态变迁的过程,如下图。状态机的优点是清晰,方便修改。其他力扣状态机是解复杂校验的最佳方法,化烦为简,主观能动性的深刻体现。链接class Solution {public: bool isNumber(string s) { enum STATUS_TYPE { START, ON.原创 2021-10-13 22:40:41 · 69 阅读 · 0 评论 -
剑指 Offer 20. 表示数值的字符串【力扣】
题意理解给定一个字符串,判断是不是数值,数值包括小数,整数,科学计数格式三种,可以带+-;问题分析动规,一层层判断,包括整数判断,小数判断,其他花了好长时间,思路要整理整理,虽然做出来了,不过很多条件没有考虑到。链接class Solution {public: bool isNumber(string s) { int len = s.size(); int low = 0, high = len - 1; //cou原创 2021-10-06 21:52:47 · 84 阅读 · 0 评论 -
剑指 Offer 29. 顺时针打印矩阵【力扣】
题意理解给定一个矩阵,按照棒棒糖顺时针旋转,得到一个数组,打印该数组问题分析设置一个访问过数组,一个大循环内套4个小循环,分别是上,右,下,左。大循环条件是长度等于矩阵元素数量。其他力扣这个就是模拟,搞清楚就可以了。链接class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int&g原创 2021-10-06 13:08:57 · 83 阅读 · 0 评论 -
剑指 Offer 14- I. 剪绳子【力扣】
题意理解给定一个绳子,长度为n, 将它剪成任意小段,求小段长度乘积最大的剪法。问题分析用动规dp[i] 表示 i长度的绳子最大乘积。dp[0] = dp[1] = 1; 0 <= i <= n那么dp[i] = max(j * (i - j), j * dp[i - j]); 1 <= i <= j;其他力扣选取递归子结构始终是动规最难的部分。链接class Solution {public: int cutt...原创 2021-10-06 11:24:15 · 65 阅读 · 0 评论 -
剑指 Offer 36. 二叉搜索树与双向链表【力扣】
题意理解将二叉搜索树变成线索二叉树,双向链表连接。问题分析复杂的链表节点操作。其他力扣2021/10/4: 问题解决,一纸一笔一橡皮,半粗半细半投机链接/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node() {} Node(int _val) { val = _val; le原创 2021-10-04 09:32:48 · 83 阅读 · 0 评论 -
剑指 Offer 68 - II. 二叉树的最近公共祖先【力扣】
题意理解求二叉树的最近公共祖先问题分析这题挺难的,好好想想先。其他力扣链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class So原创 2021-10-01 09:49:49 · 68 阅读 · 0 评论 -
剑指 Offer 45. 把数组排成最小的数【力扣】
题意理解给定一个正整数数组,问排列拼在一起拼成一个大数,求最小的数。问题分析排序,比较算法需要根据题意设计。通过两个数正拼反拼,比较出结果。越小排靠前。其他算法思路,全局排序和两两排序。可以移植同样的规则。减少打开规则分析的工作量。投机一波。力扣https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/solution/mian-shi-ti-45-ba-shu-zu-pai-cheng-z原创 2021-09-28 11:12:31 · 84 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列【力扣】
题意理解fn+1=fn+fn-1问题分析递归慢。常规的用动规,时间复杂度on;用快速幂,时间复杂度olgn。其他力扣链接动规class Solution {public: int fib(int n) { if (n == 0) return 0; if (n == 1) return 1; long c = 1e9+7; // long a = fib(n-1) % c; // long原创 2021-09-20 17:22:33 · 140 阅读 · 0 评论 -
剑指 Offer 63. 股票的最大利润【力扣】
题意理解给出一组数字,选出两个数,两个数前小后大,最大差值是多少问题分析动规思想大问题转成小问题,小问题逐步扩大。这题考虑前n个数最大利润怎么计算,记录前n个数的最小值,计算最小值和当前值的差值就是当前的最大差值。其他链接力扣https://leetcode-cn.com/problems/gu-piao-de-zui-da-li-run-lcof/solution/gu-piao-de-zui-da-li-run-by-leetcode-sol-0l1g/class So原创 2021-09-20 09:35:47 · 102 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构【力扣】
题意理解判断一个树下有没有另一个树问题分析用递归。子结构是当前节点为根是否相同。其他难力扣链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * };原创 2021-09-19 21:03:13 · 87 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II【力扣】
题意理解按照层次从上到下打印二叉树问题分析用队列,通过队列长度限制读取的范围,保障二叉树打印效果。其他0919:勿自暴勿自弃圣与贤可训至链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL),原创 2021-09-19 17:04:22 · 67 阅读 · 0 评论 -
【力扣】剑指 Offer 58 - II. 左旋转字符串
题意理解给定一个字符串,长度为cnt,指定数字n,移动前n个字符到末尾,输出移动后的字符串问题分析通过3次调换实现第一次是前后调换第二次是调换前cnt-n个字符,调换后n个字符。即可完成。难点是:调换需要指定中间位置,以及对调的位置。花了好长时间。头疼。其他链接class Solution {public: string reverseLeftWords(string s, int n) { int cnt = s.size();原创 2021-09-15 10:31:33 · 83 阅读 · 0 评论 -
【力扣】1996. 游戏中弱角色的数量
题意理解给定一个二维数组,n*2,每行有前后两个元素,问,对于每行,如果存在一行,前后两个元素都比它大,那么就算一个,统计总个数。问题分析用到排序用到要给推理:就是按照第一个元素从大到小排序,当第一个元素相同,按照第二个元素从小到大排序,这样当第二个元素比最大的第二个元素小,说明前面出现了要求的元素,算一,反之,更新最大的第二个元素为当前第二个元素。其他力扣链接class Solution {public: int numberOfWeakCharacters(v原创 2021-09-14 22:48:25 · 115 阅读 · 0 评论 -
LCS 03. 主题空间【力扣】
题意理解有n个人做2n道题,每道题属于一种知识类型,问n个人最少做的题型有几种?问题分析贪心法其他链接原创 2021-07-03 18:08:08 · 129 阅读 · 0 评论 -
LCS 02. 完成一半题目【力扣】
题意理解有n个人做2n道题,每人只做一道题,每道题属于一种知识类型,问n个人最少做的题型有几种?问题分析贪心法要想遇到的知识类型最少,那么选择的题同知识类型越多越好。所以对2n题的知识类型计数,知识类型数量越多的题先选,直到选满n即可。其他模拟题,知识类型的编号看成知识类型的数量所以百思不得其解。链接class Solution {public: int halfQuestions(vector<int>& questions) { .原创 2021-06-27 17:15:38 · 166 阅读 · 0 评论 -
LCS 01. 下载插件【力扣】
题意理解下载插件,每分钟下载一个插件,每分钟可选策略有两个,一个是当前速度下载;一个是速度加倍同时后面下载速度都按新速度来。问下载n个插件最少需要几分钟?问题分析模拟+贪心题意比较绕,需要多解释下,对于当前一分钟来看,可以按照当前速度下载,也可以当前一分钟不下载只加倍再到下一分钟下载。所以思路是贪心,看看剩余插件数是不是小于速度的2倍,小的话就按当前速度下载。其他此题花的时间比较长,是因为加速时候需要一分钟,而且加倍可以翻番加倍。理解力啊。链接class Solution原创 2021-06-26 11:26:46 · 150 阅读 · 0 评论 -
42. 接雨水【力扣】
题意理解给定高低不均匀的一组柱子高度,计算下雨后可以接住的雨水数量。问题分析用栈。思路还是放在入栈和出栈上。如果是下降,那么直接入栈。如果是上升,开始处理接住的雨水数量。每上升一次,计算接住的数量,一层一层往上累加其他https://leetcode-cn.com/problems/trapping-rain-water/submissions/此题甚难,明白了练好算法是要花时间的,如果喜欢,花再多的时间也愿意啊。链接class Solution {publi原创 2021-02-16 22:09:43 · 89 阅读 · 0 评论 -
【力扣】5661. 替换隐藏数字得到的最晚时间
题意理解给你一个字符串 time ,格式为 hh:mm(小时:分钟),其中某几位数字被隐藏(用 ? 表示)。有效的时间为 00:00 到 23:59 之间的所有时间,包括 00:00 和 23:59 。替换time 中隐藏的数字,返回你可以得到的最晚有效时间。问题分析难点在于怎么考虑全所有的时间数字组合。其他https://leetcode-cn.com/problems/latest-time-by-replacing-hidden-digits/链接clas..原创 2021-01-24 21:17:36 · 187 阅读 · 0 评论 -
【力扣】5653. 可以形成最大正方形的矩形数目
题意理解给你一个数组 rectangles ,其中 rectangles[i] = [li, wi] 表示第 i 个矩形的长度为 li 、宽度为 wi 。如果存在 k 同时满足 k <= li 和 k <= wi ,就可以将第 i 个矩形切成边长为 k 的正方形。例如,矩形 [4,6] 可以切成边长最大为 4 的正方形。设 maxLen 为可以从矩形数组rectangles 切分得到的 最大正方形 的边长。返回可以切出边长为 maxLen 的正方形的矩形 数目 。问题..原创 2021-01-17 22:22:44 · 131 阅读 · 0 评论 -
字符串输入【牛客】
题意理解输入一组字符串,以,隔开,对这组字符串排序,输出排序后的字符串,仍以,隔开。问题分析其他链接#include<bits/stdc++.h>using namespace std;int main(){ string line; while(cin >> line) { stringstream s...原创 2020-02-19 12:02:30 · 425 阅读 · 0 评论 -
1232. 缀点成线【力扣】
题意理解给定一些坐标系中的点,判断这些点是否在一条线上问题分析tolefttest算法判断一个点是否在一条直线的一边,如下图p,q是直线上的两点,s是需要判断的一点,如果s在p,q直线的左侧,面积是正;如果s在p,q直线的右侧,面试是负;如果s在p,q直线上,面积为0.链接https://www.cnblogs.com/wind-chaser/p/1088953...原创 2019-12-10 14:26:03 · 137 阅读 · 0 评论 -
简单错误记录【牛客网】
题意理解统计同文件名,行号的错误记录数量,要求循环只打印8个错误记录问题分析思路是逐行读入错误记录,截取文件名,行号,这样就组合成一个列表,再对这个列表的元素统计个数。输出的结果只能保留最后8个错误记录。转1:用string库作字符串处理,有io操作getline(cin,str)读取一行, s.find_first_of(' ')找到字符串第一个空格位置, s.find_last...原创 2018-12-21 17:26:00 · 366 阅读 · 0 评论 -
整数与IP地址间的转换【牛客网】
题意理解给出一个ip和整数,分别转换成整数和ip,转换规则是ip每个字段转换成8为二进制数,再拼成32位的二进制数。问题分析ip转整数,按.取各字段字符串,转化为整数,再按照a*2^24+b*2^16+c*2^8+d公式计算整数。整数转ip,分别整除2^24,2^16,2^8得到四个字段的整数,再拼在一起。其他这个问题很经典。我的方法有点笨。另外一个思路不错,如下:...原创 2018-12-28 11:32:35 · 538 阅读 · 0 评论 -
提取不重复的整数【牛客网】
题意理解题意简单,提取不重复的整数,从一个int整数中从低位到高位依次输出不重复的整数值问题分析不重复想到了用stl模板的set,可以自动剔重。尝试了以后,发现set有自动排序的功能,放弃,发现有个unordered_set,于是用之。发现顺序是反的,于是找反向迭代器,unordered_set没有,于是用数组保存正常迭代器的输出,再反向输出数组中的整数编译通过后,放到网站...原创 2018-12-17 21:32:44 · 260 阅读 · 0 评论 -
火车进站【牛客网】
题意理解一组火车进站,编号从0到9,数量和顺序不定,求所有可能的出站顺序问题分析用栈数据结构用穷举法,先用排列数next_permutation遍历所有情况,然后验证序列是否符合出栈的要求。验证出栈序列方法,逐个元素遍历入栈序列,先入栈,当栈不空,比较栈顶元素和出站序列第一个元素,如果相同,同时删掉栈顶和出站序列元素,出站序列指向下一个元素,如果不同,比较遍历下一个元素其他...原创 2018-12-29 10:23:15 · 1602 阅读 · 0 评论 -
汽水瓶【牛客网】
题意理解有n个空瓶,3个空瓶兑换一个新瓶,2个空瓶可借一瓶喝完凑成3个空瓶再兑换一个新瓶还回去。问最多喝几瓶?问题分析用类似进制转换的思路,第一轮,n/3得到新瓶数,n%3得到这一轮剩余空瓶数,将新瓶数+剩余空瓶数放到第二轮。依次类推,直到n/3 == 0表示没有新瓶,如果n%3等于2,额外得一瓶。将这些新瓶相加就是可以喝的瓶数。其他分析可得到,1个空瓶喝不了,2个空瓶喝一瓶,...原创 2019-01-04 10:23:13 · 281 阅读 · 0 评论 -
统计每个月兔子的总数【牛客网】
题意理解生兔子的问题,一只小兔子长到第三个月生一只小兔子,问第n个月兔子数量。问题分析生兔子的模型这样定义,一月大的兔子,2月大的兔子,3月或更大的兔子,兔子的数量是这三种月龄兔子的和。它们的数量变动和月份关系如下,3月兔子的数量等于2月兔子的数量加上3月兔子的数量(2月兔子长大变成3月兔子,3月兔子长大一个月和3月兔子一样),2月兔子的数量等于1月兔子的数量(一月兔子长大了变成2月兔...原创 2018-12-25 09:57:03 · 488 阅读 · 0 评论 -
成绩排序【牛客网】
题意理解一组学生名和成绩,按照升序和降序排序,保持同分数学生前后顺序不变(稳定)问题分析用STL,结构体保存name和分数,vector保存列表,stable_sort进行排序其他stable_sort需要记得cmp谓词排序只要指定<,>,不需要带=<是降序,>是升序链接https://github.com/xierensong/lear...原创 2018-12-26 11:34:35 · 326 阅读 · 0 评论 -
密码验证合格程序【牛客网】
题意理解校验密码,密码前提一个,长度超过2;要求有三个,长度超过8,大写字母,小写字母,数字和其他字符至少三种,不得有相同的长度超过2的子串。问题分析用string,逐个要求分析,长度判断用size();字符类型用数组下标逐字符统计四种类型,至少三种的判断转化为四个类型数量大于0,类型1\类型2\类型3\类型4分别为0其他不为0,共5种情况。相同长度超过2的子串,那么长度至少为...原创 2019-01-02 10:21:16 · 448 阅读 · 0 评论 -
删除字符串中出现次数最少的字符【牛客网】
题意理解给定一个字符串,删除出现字数最少的字符。问题分析用map,vector,string,algorithm处理先用map统计每个字符的数量,再将map的字符数量对当成元素输入到vector中,然后对数量字段排序,遍历vector前面的字符数字对,如果数字变化就跳出。对于最小的数字遍历数字对应的字符,循环删除该字符。其他map无法排序,需要转成vector才能处理,删除...原创 2019-01-07 09:46:59 · 845 阅读 · 0 评论 -
坐标移动【牛客网】
题意理解输入一串字符指令,adws分别表示左右上下四个方向,数字表示移动的坐标点数,开始位置在(0,0),求最终坐标位置。问题分析用string库处理字符串,定位分隔符->取子串循环处理,直到结束。其他记得循环处理输入。非起点定位的参数序列是(待搜索字符,起点下标)链接https://github.com/xierensong/learngit/blob/ma...原创 2019-01-03 09:24:40 · 382 阅读 · 0 评论 -
CPP宏定义解析处理【python】
问题描述c++宏定义文件中关键字有#define, #undef #ifndef, #ifdef, #else,#endif, 处理注释,//,/*,*/, 解析文件,输出其中的宏定义分析思路文本分析基础是字符串处理,宏定义文件的处理需要对遇到的关键字执行特殊的处理。文件定义的中间数据结构用嵌套列表,宏定义主要是顺序结构和分支结构,顺序结构好理解,一个宏定义作为一个字典,字典作为列...原创 2019-01-13 11:11:14 · 2448 阅读 · 13 评论 -
字符串排序【牛客网】
题意理解输入一串字符,对其排序输出,排序的方式是对大小字母不区分大小写按字典序输出,相同字母大小写保持输入顺序,其他字符位置不变。问题分析用vector,string,stable_sort。3个排序要求中,第一个要求可以重写比较函数解决,第二个要求可以用stable_sort解决,第三个在输出上做文章,遍历一遍原字符串,如果字符非大小写字母直接输出,否则输出排序中对应位置的字母。...原创 2019-01-08 10:42:38 · 347 阅读 · 0 评论