区块链技术博客
www.b2bchain.cn

力扣刷题记录

这篇文章主要介绍了力扣刷题记录的讲解,通过具体代码实例进行20942 讲解,并且分析了力扣刷题记录的详细步骤与相关技巧,需要的朋友可以参考下https://www.b2bchain.cn/?p=20942

本文实例讲述了2、树莓派设置连接WiFi,开启VNC等等的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7039.html。具体如下:

这里写自定义目录标题

  • 力扣刷题记录
    • 134加油站题目
    • 1432. 改变一个整数能得到的最大差值

力扣刷题记录

马上要进入大三下学期,准备考研的生活。为了提高考研复试的竞争力,准备在这段时间做一些算法题目,目标是每天至少两道力扣中等题目,希望可以好好坚持。为春季pat做好准备。
目标:每天两道力扣中等题目和解题记录。
每周力扣复习记录,回顾当周完成的题目。

134加油站题目

中文说明如下:

在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。

你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。

如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。

说明:

如果题目有解,该答案即为唯一答案。
输入数组均为非空数组,且长度相同。
输入数组中的元素均为非负数。
示例 1:

输入:
gas = [1,2,3,4,5]
cost = [3,4,5,1,2]

输出: 3

解释:
从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油
开往 4 号加油站,此时油箱有 4 – 1 + 5 = 8 升汽油
开往 0 号加油站,此时油箱有 8 – 2 + 1 = 7 升汽油
开往 1 号加油站,此时油箱有 7 – 3 + 2 = 6 升汽油
开往 2 号加油站,此时油箱有 6 – 4 + 3 = 5 升汽油
开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。
因此,3 可为起始索引。
示例 2:

输入:
gas = [2,3,4]
cost = [3,4,3]

输出: -1

解释:
你不能从 0 号或 1 号加油站出发,因为没有足够的汽油可以让你行驶到下一个加油站。
我们从 2 号加油站出发,可以获得 4 升汽油。 此时油箱有 = 0 + 4 = 4 升汽油
开往 0 号加油站,此时油箱有 4 – 3 + 2 = 3 升汽油
开往 1 号加油站,此时油箱有 3 – 3 + 3 = 3 升汽油
你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。
因此,无论怎样,你都不可能绕环路行驶一周。

下面是我的解答(C++):
思路:首先,看到加油站题目想到了大一时候做过的类似的C语言上机题目。可以很容易想到的是:从加油站起点走完一圈的等价说法为:找到一点,从该点开始走完N个节点,要求全程sumgas>=sumcost,即全程中无论何时汽油量总大于等于消耗量。有一种解法为暴力求解,即从每个节点开始对每个可能性进行遍历,但这样从时间角度过于奢侈。可以很容易想到如果从j开始可以走完一圈,那么gas[j]一定大于cost[j]。因此 ,结合上述两者条件即可开码。只要sumgas>sumcost即继续进行,直到sumcost>sumgas或从某个结点开始已经走过n个节点。需要注意的是,为了实现对环形的模拟,这里采用了模运算,即对i%n进行操作。

class Solution {
public:
int canCompleteCircuit(vector& gas, vector& cost) {
int g=0,c=0;
int n=gas.size();
int index=0;
int max=0;
int now=0;
int j=0;
int flag=0;
int sum;
for(int i=0;i<n;i++)
{
flag=0;
now=gas[i]-cost[i];
sum=0;
while(now>=0)
{
if(flag0)
{
j=i%n;
flag=1;
}
i++;
now+=gas[i%n]-cost[i%n];
sum++;
if(sum
n)
return j;
}
}
return -1;
/int judge=0;
j=index;
int k;
for(int i=0;i<n;i++)
{
k=index+i%n;
judge+=gas[k]-cost[k];
if(judge<0)
return -1;
}
return index;
/
}
};
与官方题解思路相同,故不再赘述。

1432. 改变一个整数能得到的最大差值

题目描述如下:
给你一个整数 num 。你可以对它进行如下步骤恰好 两次 :

选择一个数字 x (0 <= x <= 9).
选择另一个数字 y (0 <= y <= 9) 。数字 y 可以等于 x 。
将 num 中所有出现 x 的数位都用 y 替换。
得到的新的整数 不能 有前导 0 ,得到的新整数也 不能 是 0 。
令两次对 num 的操作得到的结果分别为 a 和 b 。

请你返回 a 和 b 的 最大差值 。

示例 1:

输入:num = 555
输出:888
解释:第一次选择 x = 5 且 y = 9 ,并把得到的新数字保存在 a 中。
第二次选择 x = 5 且 y = 1 ,并把得到的新数字保存在 b 中。
现在,我们有 a = 999 和 b = 111 ,最大差值为 888
示例 2:

输入:num = 9
输出:8
解释:第一次选择 x = 9 且 y = 9 ,并把得到的新数字保存在 a 中。
第二次选择 x = 9 且 y = 1 ,并把得到的新数字保存在 b 中。
现在,我们有 a = 9 和 b = 1 ,最大差值为 8
示例 3:

输入:num = 123456
输出:820000
示例 4:

输入:num = 10000
输出:80000
示例 5:

输入:num = 9288
输出:8700

下面是我的解答:
思路:这道题很容易完成,思路很容易想到,不再多说,说实话我并不觉得这是一个中等题目。只要对其中几种情况if-else即可。需要注意的是集中函数的使用,这是我之前所不太熟练的。
力扣刷题记录

力扣刷题记录
最后是replace函数
力扣刷题记录
需要注意的是replace函数中第三个参数为str[i]时只替换第i个位置,要替换所有值为str[i]的字符,最好先char c=str[i],随后将c作为第三个参数。

class Solution {
public:
int maxDiff(int num) {
string str=to_string(num);
string maxStr=str,minStr=str;
int i=0,flag=1;
int max=0,min=-1;
while(maxStr[i]‘9’)
{
i++;
}
if(i
maxStr.size())
max=num;
else {
char c=maxStr[i];
replace(maxStr.begin(),maxStr.end(),c,‘9’);
max=stoi(maxStr);
}

    if(minStr[0]!='1')     {         char c=minStr[0];         replace(minStr.begin(),minStr.end(),c,'1');         min=stoi(minStr);     }     else{         i=1;         while(minStr[i]=='0'||minStr[i]=='1'){             i++;         }         if(i==minStr.size())         {             min=num;         }         else{         char c=minStr[i];         if(minStr[i]=='1')         int flag=1;         replace(minStr.begin(),minStr.end(),c,'0');         //if(flag)         //minStr[0]='1';         min=stoi(minStr);         }     }     return max-min; } 

};

参考:https://blog.csdn.net/m0_37316917/article/details/82712017?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160570377919725222411093%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160570377919725222411093&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-1-82712017.first_rank_ecpm_v3_pc_rank_v2&utm_term=c%2B%2Bstring%E8%BD%ACint&spm=1018.2118.3001.4449
参考:https://blog.csdn.net/qq_39407523/article/details/82532201

本文转自互联网,侵权联系删除力扣刷题记录

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 力扣刷题记录
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们