![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
题目练习
学习过程中写的代码和LeetCode上刷的题
10000hours
这个作者很懒,什么都没留下…
展开
-
【C++优先队列使用】问题总结
最后做个小实验,自定义比较逻辑,验证结果的正确性。int x,y;}A;//定义sort的比较逻辑if(a.x!//定义priority_queue的比较逻辑if(a.x!i++)while(!pq.pop();return 0;1 91 82 93 94 64 63 92 91 81 9其实关于sort和优先队列的自定义比较逻辑都是if(a.x!原创 2023-11-10 21:49:37 · 478 阅读 · 0 评论 -
找出字符串中仅出现一次的字符
#include<iostream>#include<string>using namespace std;int main(){ cout<<"input string:"<<endl; string str; cin>>str; string str_once = ""; string str_repeat = ""; for(int i = 0 ; i < str.length(原创 2021-09-18 12:21:44 · 646 阅读 · 0 评论 -
刷题记录——二分查找
最近开始刷题,记录一下自己刷题过程中的问题。关于二分查找,我之前计算中间值喜欢用(low+high)/2来计算中间值,这个式子是对的,但是会造成数据溢出(low+high可能会大于整型数的最大值)。改用(high-low)/2 + low.之前写代码基本上没有考虑到数据溢出的问题、运行超时的问题,以后要注意一下!...原创 2021-09-22 20:26:37 · 86 阅读 · 0 评论 -
【LeetCode刷题记录】数组专题
在暴力解法的最内层循环中,我们是固定指针i,j,移动指针k来寻找结果,能不能每次只固定一个指针,然后移动另外两个指针,这样就能减少一层循环。可以采用双指针法,一个指针从前向后移动,另一个指针从后向前移动,并记录移动过程中的最大水量,这样就可减少一层循环,降低时间复杂度。通过上面的的“使用额外空间”的方法,可以看到,最后有用的是最中间的一个值(或最中间的两个值),那么可以在遍历的过程中只保存中间的值,最后只利用最中间的值。此时计算结果就是7.5。首先想到的是暴力解法,嵌套循环寻找最大值,但是暴力解法超时了。原创 2023-04-27 18:48:17 · 846 阅读 · 1 评论 -
十月刷题总结
十月的某一天发现了一个网站:代码随想录由此开始了我的新的刷题历程。十月份基本上是跟着网站上的顺序做题的,算是把数据结构复习了一遍,到十月底完成了二叉树以及之前的部分,网站上数据结构的部分算是差不多完成了,接下来该算法了(回溯、贪心、动态规划等)十月没有像九月份刷题那样总结每道题,我把自己做题过程中遇到的问题,以及自己的思路都记录在了力扣笔记上,这样也方便自己查看。会找个时间总结十月刷题的主要知识点以及算法等。以后的总结也不在单独记录题目了,会分类整理、总结。大一学习数据结构的时候没有认真学,自己的基原创 2021-11-03 21:44:05 · 122 阅读 · 0 评论 -
二叉树DFS遍历总结
二叉树结构struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode() : val(0), left(NULL), right(NULL) {} TreeNode(int val) : val(val), left(NULL), right(NULL) {} TreeNode(int val, TreeNode* left, TreeNode* right) : val(val)原创 2021-10-17 21:02:42 · 706 阅读 · 0 评论 -
刷题记录——239. 滑动窗口最大值
2021/10/4题目描述给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6原创 2021-10-04 21:18:29 · 106 阅读 · 0 评论 -
9月刷题总结
大概在9月下旬开始刷题,大部分是剑指offer的题,9月份刷的是关于字符串和数组的题,语言用的C++。使用较多的算法是二分查找,对字符串的操作还不熟练,处理数值越界的意识还不够强。在拿到题目之后,会较快的有大致思路,但思路不够清晰,考虑问题的时候缺乏全面性,写出来的code在一些特殊的情况下会出错。我觉得最大的问题是思路不清晰,就是能知道使用怎样的算法,但是结合到具体题目,很难做到立即把题目分析清楚,整体的思路是有的,就是不清晰、不明确。做题频率大概是一天2~3题。希望十月份能有提升!...原创 2021-10-01 22:30:51 · 123 阅读 · 0 评论 -
刷题记录——剑指 Offer 58 - I. 翻转单词顺序
2021/9/28题目描述输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。示例 1:输入: “the sky is blue”输出: “blue is sky the”示例 2:输入: " hello world! "输出: “world! hello”解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括示例 3原创 2021-09-29 13:22:35 · 87 阅读 · 0 评论 -
刷题记录——剑指 Offer 57 - II. 和为 s 的连续正数序列
2021/9/28题目描述输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:1 <= target <= 10^5思路根据target的值创建一个数组nums,范围[1, target/2+1原创 2021-09-28 09:41:22 · 120 阅读 · 0 评论 -
刷题记录——剑指 Offer 57. 和为 s 的两个数字
2021/9/28题目描述输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]限制:1 <= nums.length <= 10^51 <= nums[i原创 2021-09-28 07:55:07 · 87 阅读 · 0 评论 -
刷题记录——剑指 Offer 53 - II. 0~n-1 中缺失的数字
2021/9/27题目描述一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8限制:1 <= 数组长度 <= 10000思路二分法,设置二分查找的边界值:left = 0,right=num.length-1,以及中间值mid。当nums[right]-原创 2021-09-27 20:16:20 · 108 阅读 · 0 评论 -
刷题记录——剑指 Offer 53 - I. 在排序数组中查找数字 I
2021/9/27题目描述统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0提示:0 <= nums.length <= 105-109 <= nums[i] <= 109nums 是一个非递减数组-109 <= target <= 109思路二分查找。当nums[mid原创 2021-09-27 18:05:23 · 85 阅读 · 0 评论 -
刷题记录——剑指 Offer 39. 数组中出现次数超过一半的数字
2021/9/27题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000思路1.先对数组进行排序,这样相同的数就可以挨在一起。2.遍历排序后的数组,若前后两数相同就对计数器count++,当count>len/2时,就跳出循环,返回nums[i].前后两数不相等时,重置cou原创 2021-09-27 16:55:05 · 105 阅读 · 0 评论 -
刷题记录——剑指 Offer 29. 顺时针打印矩阵
2021/9/26题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 1000 <= matrix[i].len原创 2021-09-27 16:27:49 · 128 阅读 · 0 评论 -
刷题记录——剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
2021/9/26题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。提示:0 <= nums.length <= 500001 <= nums[i] <= 10000思路使用双指针,从两端向中间移动1.原地修改2.使用额外内存,重新创建一个数组代码1.原地修改class原创 2021-09-26 08:58:20 · 110 阅读 · 0 评论 -
刷题记录——剑指 Offer 11. 旋转数组的最小数字
2021/9/25题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0思路利用数组本身的特征,利用二分查找可快速找到答案。1.若numbers[mid]<numbers[right]说明最小值位于[left,mid]原创 2021-09-25 20:54:18 · 86 阅读 · 0 评论 -
刷题记录——剑指 Offer 05. 替换空格
2021/9/25题目描述请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000思路1.使用额外内存,即创建一个新的字符串,遍历原字符串,若不是空格,则将原字符添加到新字符串中;否则将“%20”添加到新字符串中。2.原地修改,若使用Java、Python的话,字符串是不可变类型,若使用C++,则可对原字符串进行修改。代码1.使原创 2021-09-25 16:46:26 · 84 阅读 · 0 评论 -
刷题记录——剑指 Offer 04. 二维数组中的查找
2021/9/24 刷题记录题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 targe原创 2021-09-24 20:02:18 · 124 阅读 · 0 评论