首页 > 其他分享 >【力扣】加油站(读题)

【力扣】加油站(读题)

时间:2024-03-25 15:34:12浏览次数:17  
标签:tmp vector cur int 读题 gas 力扣 加油站 cost

题目描述

image

分析

在思路上并不是很难,是一道贪心题,但是题目中的一些细节理解不好的话稳容易出问题。
这道题在实现上的正确方法应该是:逐个遍历汽车的起点,在每个起点上汽车可能有两个情况:没油或者回到了起点,
如果回到了起点的话,则这个起点是可行的。
而理解错误的地方就在于汽车没油的判定条件。在这道题中,如果汽车在某个位置上的油为0,加油站的油为0,消耗的汽油也为0,则汽车是无法发动的,而如果起始的时候没有油但是加油站的油和消耗的汽油刚好相等,则恰好能到达下一个位置。
(。。。其实我还是觉得这题有歧义)

代码

#include<bits/stdc++.h>
using namespace std;
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
	int cur ;//= 0;
	//bool exist  = false;;
	int result = -1;
	for(int i = 0; i < gas.size(); i++){
		cur = gas[i] - cost[i];
		int j = (i+1)%gas.size();
		while(cur > 0 && j != i){
//			if(cur + gas[j] - cost[j] < 0){
//				//exist = false;
//				break;
//			}
//			if((j + 1)%gas.size() == i){
//				exist = true;
//				break;
//			}
			cur += gas[j] - cost[j];
			cout<<cur<<endl;
			j = (j + 1)%gas.size();
		}
//		if(exist){
//			cur = i;
//			break;
//		}
		if(j == i){
			result = j;
			break;
		}
	}
//	if(j != i){
//		return -1;
//	}else{
//		return j;
//	}
	return result;
}
int main(){
	int n;
	cin>>n;
	int tmp;
	vector<int> gas;
	vector<int> cost;
	for(int i = 0; i < n; i++){
		cin>>tmp;
		gas.push_back(tmp);
	}
	for(int i = 0; i < n; i++){
		cin>>tmp;
		cost.push_back(tmp);
	}
	cout<<canCompleteCircuit(gas, cost);
	return 0;
}

标签:tmp,vector,cur,int,读题,gas,力扣,加油站,cost
From: https://www.cnblogs.com/satsuki26681534/p/18094470

相关文章

  • 【力扣刷题日记】1076.项目员工II
    前言练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。今日题目:1076.项目员工II表:Project列名类型project_idintemployee_idint(project_id,employee_id)是该表的主键(具有唯一值的列的组合)。employee_id是该表的外键(......
  • 【力扣白嫖日记】1069.产品销售分析II
    前言练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。今日题目:1069.产品销售分析II表:Sales列名类型sale_idintproduct_idintyearintquantityintpriceintsale_id是这个表的主键(具有唯一值的列)。product_id是Product表......
  • Offer必备算法16_字符串_四道力扣题详解(由易到难)
    目录①力扣14.最长公共前缀解析代码1(两两比较)解析代码2(统一比较)②力扣5.最长回文子串解析代码(中心拓展)③力扣67.二进制求和解析代码④力扣43.字符串相乘解析代码(无进位相乘)本篇完。①力扣14.最长公共前缀14.最长公共前缀难度简单编写一个函数来查找字符......
  • 【每周例题】力扣 c++ 自除数
    自除数题目 题目分析1.这道题可以直接用暴力求解,动用for循环遍历从left到right的每个数,使用while判断是否为自除数。2.满足自除数有两个要求:1.数位不能存在0;2.自除数除于数位为0;这里可以使用if语句进行判断。3.由于自除数的数量位置,所以存储自除数可以采用容器或者数列来存......
  • 【每周例题】力扣 c++ 各位相加
    各位相加题目各位相加 题目解析这个题目看似需要使用递归方法或者使用while循环进行求解,其实你只需要统计前三十个数就可以发现规律:  根据图表可知,除了数字0,其他数字各位相加的最后结果都是其数字对9取模。所以从这个结果可以得到以下代码代码#include<iostream>u......
  • 【每周例题】力扣 C++ 两数之和
    两数之和题目 题目分析1.返回两个数的下标和,第一反应可以是采用双for循环2.数组数值等于整数目标值,那就采用if判断,符合直接输出,跳出循环,避免输出多个答案3.由于力扣题目采用了容器,大家可以选择点击该链接了解:容器代码#include<iostream>#include<vector>usingnamesp......
  • 【每周例题】力扣 C++ 组合
    组合题目力扣组合 题目解析1.我们可以根据题目分析可知,题目所要求我们做的是:从1到n进行遍历,找出k个数组成小组合,再将小组合拼接在一起成为大组合输出。2.所以,根据题目,我们可以采用两个数组,一个一维数组temp,负责存储k个数,组为小组合,一个二维数组res,存储小组合,变为大组合。......
  • Offer必备算法15_简单多问题dp_八道力扣题(打家劫舍+买卖股票)
    目录①力扣LCR089.打家劫舍解析代码②力扣213.打家劫舍II解析代码③力扣740.删除并获得点数解析代码④力扣LCR091.粉刷房子解析代码⑤力扣309.买卖股票的最佳时机含冷冻期状态机分析解析代码⑥力扣714.买卖股票的最佳时机含手续费状态机分析解析代码⑦......
  • 【力扣】268.丢失的数字
    题目描述给定一个包含[0,n]中n个数的数组nums,找出[0,n]这个范围内没有出现在数组中的那个数。示例1:输入:nums=[3,0,1]输出:2解释:n=3,因为有3个数字,所以所有的数字都在范围[0,3]内。2是丢失的数字,因为它没有出现在nums中。示例2:输入:nums=[0,......
  • 力扣HOT100 - 49. 字母异位词分组
    解题思路:排序注意:返回时不能用List,因为List是抽象类,return的必须是List的具体实现,如ArrayListclassSolution{publicList<List<String>>groupAnagrams(String[]strs){Map<String,List<String>>map=newHashMap<>();for(Stringstr......