- 博客(23)
- 收藏
- 关注
原创 第24题:走台阶
解题思路:通过递归来实现,对每次递归的结果进行判断,如果走过的台阶数为39,结束递归,同时判断走的步数是否为偶数,为偶数则为sum加一,否则sum不改变。源代码:#include<iostream>using namespace std;int sum = 0;int f(int n, int step){ if (n < 0) return 0; if (step % 2 && n == 0) sum++;...
2021-11-22 19:57:27 265
原创 第23题:字母间的距离
解题思路:可以使用2个for循环来嵌套使用,依次算出每两个字母间的距离,然后进行累加,最后输出结果。源代码:#include <stdio.h>#include<iostream>#include<string.h>using namespace std;int main(){ int num = 0,cnt=0; string a; cin >> a; for (int i = 0; i < a.le...
2021-11-22 19:33:09 452
原创 第22题:t分钟后,是几点几分
解题思路:在原有的时间基础上,把分加到t分钟,然后看能整除多少个60,时间上便加多少小时,多余的加在分钟上。源代码:#include<stdio.h>#include <iostream>using namespace std;int main(){ int hour, min,num,re,i=0; cin >> hour >> min >> num; re = min + num; for (i...
2021-11-22 19:12:31 583
原创 第20题:要制作所有的 1 到 4040 号门牌,总共需要多少个字符2
解题思路:由于是要算字符2,所以可把一个数拆分为个位数、十位数、百位数、千位数,如果这些数字当中有等于2的,那么sum加1.源代码:#include<stdio.h>#include<iostream>using namespace std;int main(){ int i = 0, sum = 0; for (i = 1; i <= 4040; i++) { if (i % 10 == 2) ...
2021-11-21 20:56:45 379
原创 第19题:计算矩阵第40行40列的数
解题思路:观察第一行第一列为1,第二行第二列为5,第三行第三列为13,则可以看出第n行第n列的关系为sum+=4*(行数-1)。源代码:#include<stdio.h>#include<iostream>using namespace std;int main(){ int i=0 , sum=1; for (i = 1; i <= 40; i++) { sum += 4 * (i-1); } cout...
2021-11-21 20:34:14 421
原创 第18题:相似字符串组
解题思路:写一个find函数,其作用是判断字符串是否相似,接着算字符串列表的长度,再把每一个字符串做比较,若相似,则归为一组,否则在另一组。源代码:classSolution{public:intnumSimilarGroups(vector<string>&strs){intn=strs.size();intm=strs[0].size();for(inti=1;i<=n;+...
2021-11-21 17:25:55 222
原创 第17题:滑动窗口最大值
解题思路:最大值用单调队列来维护,维护队首为最大值,当遍历的长度大于或等于k时,我们直接向答案容器中push_back队首元素即可,而遍历新的元素,我们通过nums[i]与队尾索引所在的元素相比即nums[dp.back()],如果nums[i] < nums[dp.back()] 那么说明,此时这个元素对于破坏当前的递减规则没有作用,我们直接把它的索引加在队列后面即可;反之,则永久删除队尾元素。作者:yunson_链接:https://leetcode-cn.com/problems/slid
2021-11-21 10:55:46 259
原创 第16题:网络延迟时间
解题思路:先写一个比较函数,用于得到最小值,用Dijkstra算法算出源点到所有点的最短路径,再取最长的那个返回即可源代码:structMyStruct{intpos;inttime;//比较函数,在优先队列里,将较小的排在尾部,top()得到的就是队列里面最小值booloperator<(constMyStruct&a)const{returntime>a.time;...
2021-11-17 22:56:18 113
原创 第15题:省份数量
解题思路:运用并查集,当城市之间有路径时,合并不同省份的城市,当没有路径时,什么也不做。并且,运用按秩合并的方法防止树退化成线性表,即总是让秩较小的根节点插入到秩较大的根节点处。源代码:classSolution{public:intfindCircleNum(vector<vector<int>>&isConnected){intn=isConnected.size();intans=n;//初始,所有城市均在不...
2021-11-15 17:07:27 703
原创 第14题:数组的度
解题思路:用一个map将nums的值作为key存入,在value中记录出现的次数,第一次出现的位置,出现的最后一次的位置。然后第二次遍历values找到最大的次数,用最后一次位置减去第一次位置加一就可以得到最小数组了。源代码:classSolution{publicintfindShortestSubArray(int[]nums){Map<Integer,int[]>map=newHashMap<>();in...
2021-11-13 15:53:14 407
原创 第13题:搜索二维矩阵
解题思路:采用循环,首先从第i行第0列的值开始搜索,接着使用while循环,同时内嵌while循环,如果不能够找到target的值,就返回false,否则返回true。源代码:classSolution{public:boolsearchMatrix(vector<vector<int>>&matrix,inttarget){inti=matrix.size()-1,j=0;//开始的格子matri...
2021-11-13 15:34:19 727
原创 第12题:最长递增子序列
解题思路:采用dp动态规划,再使用循环,计算出dp[j]+1的最大值,为直到i的最长上升子序列长度,max_len为dp列表最大值,即可得到全局最长上升子序列长度。源代码:classSolution{public:intlengthOfLIS(vector<int>&nums){intlen=nums.size();vector<int>dp(len+1,1);intmax_val=...
2021-11-10 09:38:07 60
原创 第11题:猜数字大小(二)
解题思路:利用动态数组vector,dp[i][j]表示数字在[i,j]范围之内的最小花费,那么枚举[i,j]之间的每一个数,假设当前枚举的数字为 k ,dp[i][j] = min(dp[i][j],max(dp[i][k-1],dp[k+1][j])+k),遇见的问题就是可能 k - 1 < i 或者 k+1 > j源代码:classSolution{public:intgetMoneyAmount(intn){vector<vector<...
2021-11-10 09:06:34 62
原创 第10题:猜数字大小
解题思路:利用二分法来不断缩小范围,再加上一个while循环,接着使用预先定义好的接口int guess(int num)来获取猜测结果,直至最终猜出。源代码:classSolution{public:intguessNumber(intn){intpick;intmid,low=0,high=n,flag;while(low<=high){mid=low+(high...
2021-11-09 23:04:31 80
原创 第九题:判断子序列
解题思路:在字符串t中遍历,如果按顺序能够找全s的话,就返回true,如果遍历完t后,仍然找不全s,则返回false.源代码:classSolution{public:boolisSubsequence(strings,stringt){constintls=s.size(),lt=t.size();if(ls>lt)returnfalse;inti,j=-1;for...
2021-11-09 22:45:23 66
原创 第八题:用栈实现队列
解题思路:用两个栈实现队列,其中一个入栈,一个出栈。源代码:classMyQueue{public:MyQueue(){}voidpush(intx){stk1.push(x);}intpop(){if(stk2.empty()){//如果stk2是空的,那么把stk1都注入stk2中while(!stk1.empty()){...
2021-11-07 14:38:01 116
原创 第七题:有效的字母异位词
解题思路:利用字符串的性质和sort函数,对字符串排序,判断两者是否相等,若相等,返回true,否则,返回false。源代码:class Solution {public: bool isAnagram(string s, string t) { sort(s.begin(),s.end()); sort(t.begin(),t.end()); return s==t; }};运行结果:示例1:示例2:...
2021-11-07 13:24:59 69
原创 第六题:颠倒二进制位
解题思路:、对二进制数进行翻转,类似于整数翻转,需要先获得二进制数的末位。可以通过与运算实现(1 & n)。获取末位值后,需要获得倒数第二位数值,这里通过移位即可实现:n>>1,使倒数第二位移至末位。源代码:classSolution{public:uint32_treverseBits(uint32_tn){intresult=0;for(inti=0;i<32;i++){...
2021-11-06 16:05:32 89
原创 第五题:计算数组的中心下标
解题思路:求出整个数组的总和,然后再用循环进行比较,若有符合条件的,就输出那个下标,否则输出-1。源代码:classSolution{public:intpivotIndex(vector<int>&nums){longsum=0;for(intj=0;j<nums.size();j++){sum+=nums[j];}...
2021-11-04 11:23:27 204
原创 第四题:托普利茨矩阵
解题思路:因为该矩阵是需要判断对角线上元素是否相同,我们可以判断每一个元素与它的右上角元素是否相同,若都符合,则为该矩阵。源代码:classSolution{public:boolisToeplitzMatrix(vector<vector<int>>&matrix){intm=matrix.size(),n=matrix[0].size();for(inti=0;i<m;i++){...
2021-11-03 22:08:26 111
原创 第三题:验证是否为回文串
解题思路:首先只保存字母和数字,接着把筛选下来的分成两半,再使用一个for循环来判断是否中心对称即可。源代码:classSolution{public:boolisPalindrome(strings){stringstr;for(inti=0;i<s.length();i++){if(isalnum(s[i])){str+=tolower(s[i]);}}intlen=str.leng...
2021-11-03 21:52:04 77
原创 第二题:求最后一个单词的长度
解题思路:看到最后两字,我们应该想到从最后面往前面来算,只需将最后可能存在的空格字符删除即可,然后倒序累加,直至遇见空格字符,此时停止循环,然后把数计算出来。源代码:classSolution{public:intlengthOfLastWord(strings){inti=s.size()-1;while(s[i]=='')i--;intlast=i;while(i--...
2021-11-01 21:06:18 43
原创 1.第一题,实现strStr()
解题思路:首先,要搞清楚目的是什么,是要在haystack字符串中找出needle字符串出现的第一个位置,这就可以分为两种情况来讨论,当haystack字符串长度小于needle字符串长度时,在haystack字符串中是一定找不到needle字符串出现的位置的;反之,便可以使用两个for循环来判断是否能够找到needle的位置,令i小于等于两个字符串长度之差,再令j小于needle字符串长度,使用for循环嵌套来判断,如若找到,输出i的大小即可。源代码:#include<iostream>
2021-11-01 20:40:43 50
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人