![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣
thwwu
where there is a will there is a way
展开
-
Java 除以2与向右位移1
除以2 与 向右位移1 ,一定要注意 运算符的优先级原创 2022-08-14 21:46:39 · 663 阅读 · 0 评论 -
力扣1124 表现良好的最长时间段c++
还是有点混乱>_<原创 2022-03-15 10:21:44 · 1239 阅读 · 0 评论 -
力扣844 比较含退格的字符串(C++,踩坑,逻辑问题,if短路)
题目请点击思路其实思路没有多难的,想记录的是,自己太不留心了。本来是想把if语句的判断写到一起,结果。。。起初写的是 if(!sta.empty()&&str[i]==’#’)但这样有个问题呀,如果栈sta空了(!sta.empty()为假),那么倘若当前的str[i]是’#’,由于“短路”,此if语句直接就为假了,就去执行else字句,把’#'压入栈了。。代码错误代码class Solution {public: stack<char> moveToS原创 2022-03-13 22:50:13 · 1577 阅读 · 0 评论 -
力扣57插入区间C++
题目请点击思路与56基本一致,只是先把newInterval加入到intervals中代码#include<iostream>#include<vector>#include<algorithm>using namespace std;static bool cmp(vector<int> &x1, vector<int> &x2){ return x1[0] < x2[0];}vector<原创 2021-06-04 19:41:47 · 112 阅读 · 0 评论 -
力扣56合并区间C++
题目请点击思路先对intervals二维数组按照第一维大小升序排序循环遍历,若intervals[i][0]大于等于rets[j][0] 并且 小于等于rets[j][1]则需要进行合并,更新rets[j][1]即可(rets是待返回的二维数组)反之,rets中无此小区间,将其加入rets中代码#include<iostream>#include<vector>#include<algorithm>using namespace std;stat原创 2021-06-03 23:13:38 · 216 阅读 · 0 评论 -
力扣55跳跃游戏C++
题目请点击思路其实整体还是很容易有想法的,就是跳了无数的坑…贪心,大体思路就是,每次找出可跳跃范围内的最大可跳跃的步数,并记录此位置下标。以此类推,直到,跳到末尾返回true或最大可跳跃数目为0返回false。踩坑情况1:在可跳跃范围内,最大可跳跃数maxStep多次出现。最初使用max_element()求最大值仅能返回最大值出现的第一个位置,所以得自己写求maxStep的代码块。例:第163个测试点,[5,9,3,2,1,0,2,3,3,1,0,0],如下图,第一次跳至下标1位置,此原创 2021-06-01 19:54:03 · 224 阅读 · 1 评论 -
力扣48旋转图像C++
题目请点击思路找规律~step1: 使用reverse()对整个二维数组进行翻转(使得末尾的行跑到前面,即由1,2,3; 4,5,6; 7,8,9变成7,8,9; 4,5,6; 1,2,3)step2: 两层for循环(i初始为0,j初始为i+1),交换,swap([i][j], [j][i])时间复杂度为O(n^2),空间复杂度为O(1)代码#include<iostream>#include<vector>#include<algorithm&g原创 2021-05-25 10:15:11 · 137 阅读 · 0 评论 -
力扣49字母异位词分组C++
遍历 对每个排序 整合进map原创 2021-05-22 16:24:18 · 143 阅读 · 0 评论 -
力扣43字符串相乘
力扣43字符串乘原创 2021-05-18 20:06:08 · 120 阅读 · 0 评论 -
力扣36有效的数独C++
循环原创 2021-05-13 15:55:03 · 98 阅读 · 0 评论 -
力扣34在排序数组中查找元素的第一个和最后一个的位置C++
二分查找法的变体C++原创 2021-05-12 23:48:07 · 206 阅读 · 0 评论 -
力扣22搜索旋转排序数组C++
C++旋转数组搜索也可用二分查找法原创 2021-05-10 16:47:48 · 128 阅读 · 0 评论 -
力扣29两数相除C++
力扣29两数相除C++除法=》多次减法原创 2021-05-07 17:46:53 · 150 阅读 · 0 评论 -
力扣22括号生成
题目请点击思路哎,没想到,看别人的思路请点击代码#include<iostream>#include<vector>#include<string>#include<algorithm>using namespace std;vector<string> generateParenthesis(int n) { vector<vector<string> > dp(n+1); dp[0]原创 2021-05-06 14:53:49 · 49 阅读 · 0 评论 -
力扣16最接近的三数之和C++
排序+双指针原创 2021-04-26 17:59:14 · 85 阅读 · 0 评论 -
力扣12整数转罗马数字C++
题目请点击思路感觉理解题意即可对num每次模10取余,若余数n为4或9时单独处理若余数n小于4则,按规定输出n个该位表示1的那个字符(比如个位,则输出n个I,十位,输出n个X)若余数n大于4小于9,则先输出n-5个该位表示1的那个字符,再输出该位表示5的那个字符注:都是反过来的,因为是直接压入字符串的,最后再颠倒过来,所以都是反过来的代码#include<iostream>#include<string>#include<algorithm>u原创 2021-04-24 10:27:24 · 103 阅读 · 0 评论 -
力扣11盛最多水的容器C++
题目请点击思路双指针遍历,每次求得i与j的下标之差作为边l1,用height[i]与height[j]中的最小值作为边l2(因为肯定不能超出最小边)若当前面积大于保存的最大面积则更新否则若height[i]<height[j],说明左边较小,则i++若height[i]>height[j],说明右边较小,则j–若相等,则i++,j–代码#include<iostream>#include<vector>#include<cmath&原创 2021-04-23 17:36:03 · 156 阅读 · 0 评论 -
力扣171Excel表列序号C++
题目请点击思路与168列名称刚好反过来,类似于进制转换for循环遍历,从头获取每个字符,注意题目中的序号是从1开始的,所以这里每次都有+1,即columnTitle[i]-‘A’+1乘以多少次方,借助pow()函数即可代码#include<iostream>#include<cmath>using namespace std;int titleToNumber(string columnTitle) { int num=0; int len=c原创 2021-04-20 21:10:28 · 195 阅读 · 0 评论 -
力扣169多数元素C++
题目请点击思路第一种,就是纯粹暴力求解,用了一个map来记录数组中每个元素出现的次数第二种,get到了一种新方法,投票法(1)方法用num表示要找的那个元素(num可随机初始化某个值),用count记录出现次数for循环遍历数组,若当前元素nums[i]==num,则count++,否则,count–最后直接返回num即可(2) 原理题目要求找的元素,是出现次数大于n/2向下取整,也就是出现次数超过一半的元素那么,若nums[i]==num,count++,其实也就是将需要的那个元原创 2021-04-19 19:24:14 · 156 阅读 · 0 评论 -
力扣168Excel表列名称C++
题目请点击思路类似于,给个数,怎么分离出来个、十、百、千…位while循环,每次对26取余,且除以26需要注意的是,这个下标是从1->A开始,所以每次取余的结果需要减1若是取余的结果为0,则需要向“高位”借位最后,反转字符串代码#include<iostream>#include<algorithm>#include<string>using namespace std;string convertToTitle(int columnN原创 2021-04-18 16:25:07 · 114 阅读 · 0 评论 -
力扣167两数之和II-输入有序
题目请点击思路起初,用find找直接超时,官网题解,用双指针。哎。。。双指针很经常用到的!!迭代器与下标转换记录个小知识点用find函数,返回的是迭代器,要求的是需要下标,可以用迭代器减去数组起始就是下标auto it=find(nums.begin(),nums.end(),temp);int index=it-nums.begin()代码#include<iostream>#include<vector>#include<algorithm>原创 2021-04-17 18:14:13 · 77 阅读 · 0 评论 -
力扣136只出现一次的数字
题目请点击思路看到题中,尝试,空间复杂度为常数,想到排序,除某个元素外其他元素均出现两次,那就For循环遍历,且步长为2,判断下个元素与当前元素是否相同,若不同就找到了,返回。但是这样算上sort排序的时间复杂度,就不满足,题中“时间复杂度为线性”的要求了…然后,看官网的题解,才知道,可以用,异或,这个运算符的特殊性质(相异为1,相同为0),根本没想到…代码#include<iostream>#include<vector>#include<algorithm原创 2021-04-16 12:59:09 · 42 阅读 · 0 评论 -
力扣125验证回文串C++
题目请点击思路首先例外情况,当字符串为空时,也是回文串,返true双指针遍历,i=0,j=len-1,循环条件i<j若s[i]或s[j]不是字母或数字时,直接跳过若s[i]或s[j]是大写字母时,转成小写字母若s[i]!=s[j]时,说明不是回文串,返回false遍历结束,返回true,(s[i]与s[j]全相等)踩坑起初采用的循环条件是i!=j,结果直接报错大概的意思是越界了然后,仔细想了下,确实是,如果字符串的长度是偶数,比如给出的"aa",那么第一次循环i=0,j原创 2021-04-15 21:14:36 · 145 阅读 · 0 评论 -
力扣121/122/123买卖股票的最佳时机(?)C++
题目请点击思路直接暴力循环遍历参考官网的题解代码#include<iostream>#include<vector>using namespace std;int maxProfit(vector<int>& prices) { int profit=0,minPrice=10000; int size=prices.size(); for(int i=0;i<size;i++){ if(pric原创 2021-04-12 15:36:30 · 64 阅读 · 0 评论 -
力扣119杨辉三角II
题目请点击思路最初其实就是用力扣118中的方法,定义二维数组来存储。考虑优化空间复杂度,仅使用一维的数组来计算。由于使用的一维数组,那么新计算的和肯定是会覆盖掉之前的值的,所以关键在于当每次计算完新和后,要记录下一次要用于计算的两个值,这里用org1与org2表示。设org1与org2的初值分别为数组中的前两个元素循环计算新和,并保存在数组中(直接覆盖掉前面的值),然后更新org1与org2显然,杨辉三角每次用于和计算的两个值都是紧挨着的,那么,下次用于计算的org1等于本次用于计算的or原创 2021-04-11 23:19:51 · 159 阅读 · 0 评论 -
力扣118杨辉三角
题目请点击思路观察杨辉三角/* 列0 1 2 3 4第0行 1 第1行 1 1第2行 1 2 1第3行 1 3 3 1第4行 1 4 6 4 1*/得到如下规律每行第一个元素与最后一个元素均为1该行其余元素的值等于 上行该位置前一个元素 + 上行该位置的元素即vecs[i][j]=vecs[i-1][j-1]+vecs[i-1][j];代码#include<iostream>#include<vector>using nam原创 2021-04-07 21:59:40 · 48 阅读 · 0 评论 -
88合并两个有序数组
题目请点击思路双指针i,j 依次把两个数组中nums1[i]与nums2[j]小的放入到另一个排序数组中若nums1与nums2最后有元素未被遍历到,则直接插入代码class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int i=0,j=0,pos=0; vector<int> num原创 2021-04-06 18:48:52 · 48 阅读 · 0 评论 -
力扣67二进制求和C++
题目请点击思路获取到字符串a与b的长度,判断哪个字符串长度大,将长度小的字符串前面补0直至长度一致for循环,倒序,从a,b字符串末尾开始相加。并判断是否有进位考虑例外,就是下标0的和需要进位,因此需要对0下标的特殊处理。即,判断是否需要进位,若产生进位,则在字符串开始插入‘1’注:始终用字符串a作为和的字符串,省空间代码#include<iostream>#include<vector>using namespace std;string addBinar原创 2021-04-05 21:11:24 · 139 阅读 · 0 评论 -
力扣66加一
题目描述请点击思路先对数组中最后一个元素+1然后,for循环,倒序遍历,判断每个元素是否大于10,若大于则进位考虑一种例外情况,就是99,+1=100,这样就需要在开头插入元素1.因此,最后需要判断第一个元素是否大于10,若大于则进位代码#include<iostream>#include<vector>using namespace std;vector<int> plusOne(vector<int>& digits) {原创 2021-03-31 11:24:45 · 99 阅读 · 0 评论 -
力扣58最后一个单词的长度C++
题目描述请点击思路for循环,倒序开始,len++记录每个最后一个单词长度代码#include<iostream>#include<string>#include<cctype>using namespace std;int lengthOfLastWord(string s) { int sLen=s.length(); int len=0,flag=0; for(int i=sLen-1;i>=0;i--){原创 2021-03-30 22:35:35 · 104 阅读 · 0 评论 -
力扣53最大子序和
题目描述请点击解题思路em得承认自己参考了官网题解代码#include<iostream>#include<algorithm>#include<vector> using namespace std;int maxSubArray(vector<int>& nums) { int preSum=0,maxSum=nums[0]; for(int &x:nums){ preSum=max(preSum+x,x);原创 2021-03-29 15:41:21 · 154 阅读 · 0 评论 -
力扣35-搜索插入位置C++
题目描述请点击解题思路for循环遍历数组,数组元素第一个大于等于target的元素下标就是要插入或找到的位置有个例外情况,就是,数组中所有元素都不大于target,那么返回数组大小,即数组最后一个元素的后一个位置AC代码class Solution {public: int searchInsert(vector<int>& nums, int target) { int size=nums.size(); for(int i=0原创 2021-03-27 10:56:40 · 220 阅读 · 0 评论 -
力扣28 实现strStr() C++
题目描述请点击解题思路用一个字符n存储needle的首字母for循环遍历haystack字符串,找到与n相同字符的下标i若找到从此下标i开始截取needle长度的字符串,判断与needle是否相同,相同返回下标i否则,未找到返回-1AC代码int strStr(string haystack, string needle) { int len2=needle.length(); if(len2==0) return 0; char n=needle[0]; in原创 2021-03-26 20:47:41 · 157 阅读 · 0 评论 -
力扣27移除元素
题目描述请点击代码:#include<iostream>#include<vector>using namespace std;int removeElement(vector<int>& nums, int val) { int size=nums.size(); int i=0; for(int j=0;j<size;j++){ if(nums[j]!=val){ nums[i]=nums[j]; i++;原创 2021-03-25 22:38:50 · 116 阅读 · 0 评论 -
力扣26删除数组中的重复项C++
题目请点击思路int cnt=0 用cnt表示当前数组中不重复出现元素的下标for循环从数组下标1开始遍历若nums[cnt]==nums[i]表明元素重复了 直接continue继续下一个循环若是不相等则表明不重复,先让cnt++,然后nums[cnt]=nums[i]最后返回cnt+1(+1是因为cnt是当前不重复出现元素的下标,是从0开始的,那么实际的不重复元素个数就比当前下标多1)代码int removeDuplicates(vector<int>&am原创 2021-03-09 15:11:14 · 160 阅读 · 0 评论 -
力扣20有效的括号C++
题目请点击思路用数组cnt[3]表示括号数量。其中下标0对应(),下标1对应[],下标2对应{}。凡遇到左括号相应位置++(例:遇到[,则cnt[1]++)凡遇到右括号相应位置–。用seq表示括号顺序。for循环依次判断输入字符串的每个字符。遇到左括号,则cnt的相应位置++,并且往seq中压入相应的数字(例:(压入0,[压入1)遇到右括号,判断cnt对应位置是否为零,若为零false,判断seq最后一个元素是否和当前括号相对应(例:)需要判断seq最后一个元素是不是0)若不对应直接fals原创 2021-03-08 16:57:32 · 303 阅读 · 0 评论 -
力扣13罗马数字转整数C++(待解决)
题目请点击待解决不知道为什么,自己测试,输入的“III”,答案是3,可是评判总是1。。。不知道为啥???代码#include<iostream>#include<map>#include<string> using namespace std;int romanToInt(string s) { int num=0,flag=0;//flag标志前面有可能是数字小的 map<char,int> m; m['I']=1; m['原创 2021-03-04 22:35:58 · 139 阅读 · 1 评论 -
力扣9-回文数C++
力扣9-回文数C++原创 2021-03-02 14:29:16 · 306 阅读 · 0 评论 -
力扣7.整数反转C++
题目描述请点击思路先判断是正数还是负数,标记符号位;其次,循环,每次获取用x模10获取当前最后一位,再除以10;是很简单,一个注意点就是,判溢出,这里用的是long long int与int强转截断是否一致,就是耗内存耗时间。代码class Solution {public: int reverse(int x) { if(x==0) return 0; int sym=1; long long int num=0; if(原创 2020-12-22 22:02:49 · 181 阅读 · 0 评论 -
力扣3-无重复字符的最长子串(明天再测试)
前序可能还有小问题。em今天不知道咋了,每次提交都是内部出错,实在找不到原因,百度了下这个错误,可能是网站的问题,并且之前AC的代码再次提交也是内部出错。然后就没再公管。明天再试一下题目连接请点击思路用一个int型的数组ascii(初始化为0),其下标表示对应的ASCII码,数组里面存放每次for循环当前字符出现的次数。两层循环。外层循环,从头遍历字符串,且初始化len=1(因为紧挨着要进入内循环,内循环是从j=i+1开始,则当前字符s[i]已计数)。内层循环,遍历字符串,当当前字符已经出现过原创 2020-12-12 21:55:24 · 172 阅读 · 0 评论