首页 > 编程语言 >(算法)加油站————<贪心算法>

(算法)加油站————<贪心算法>

时间:2024-11-20 18:15:07浏览次数:3  
标签:return int gas step rest 加油站 算法 枚举 贪心

1. 题⽬链接:134.加油站

2. 题⽬描述:

3. 解法(暴⼒解法->贪⼼):

暴⼒解法:

a. 依次枚举所有的起点;

b. 从起点开始,模拟⼀遍加油的流程

贪⼼优化:

我们发现,当从i 位置出发,⾛了step 步之后,如果失败了。那么[i, i + step] 这个 区间内任意⼀个位置作为起点,都不可能环绕⼀圈。

因此我们枚举的下⼀个起点,应该是i + step + 1 。

C++算法代码: 

class Solution 
{
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) 
    {
        //找出符合条件的点
        int n=gas.size();
        for(int i=0;i<n;i++)    //选起始位置
        {
            int sum=0;   //净值
            int step=0; //移动的步数
            for(;step<n;step++)
            {
                int index = (i + step) % n; // 求出⾛ step 步之后的下标 
                sum+=gas[index]-cost[index];
                if(sum<0)
                {
                    break;
                }
            }
            if(sum>=0)
            {
                return i;
            }
            //改变初始值
            i+=step;
        }
        //所有加油站都做不到
        return -1;
    }
};

Java算法代码:

class Solution
{
	public int canCompleteCircuit(int[] gas, int[] cost)
	{
		int n = gas.length;
		for (int i = 0; i < n; i++) // 依次枚举所有的起点 
		{
			int rest = 0; // 统计净收益 
			int step = 0;
			for (; step < n; step++) // 枚举向后⾛的步数 
			{
				int index = (i + step) % n; // ⾛ step 步之后的下标 
				rest = rest + gas[index] - cost[index];
				if (rest < 0)
				{
					break;
				}
			}
			if (rest >= 0)
			{
				return i;
			}
			i = i + step; // 优化 
		}
		return -1;
	}
}

标签:return,int,gas,step,rest,加油站,算法,枚举,贪心
From: https://blog.csdn.net/2301_79580018/article/details/143922193

相关文章

  • (算法)跳跃游戏————<贪心算法>
    1.题⽬链接:55.跳跃游戏2.题⽬描述3.解法:和跳跃游戏II⼀样,仅需修改⼀下返回值即可。C++算法代码:classSolution{public:boolcanJump(vector<int>&nums){intret=0,n=nums.size();intl=0,r=0;while(l<=r){......
  • 算法--圣诞节的礼物
    #获取用户输入的箱数和马车的最大承受重量box_count=int(input('箱数:'))max_capacity=int(input('最大承受重量:'))#初始化列表,用于存储每箱的单位重量价值和详细信息unit_value_list=[]box_details_list=[]#循环获取每个箱子的总价值和总重量,并计算单位......
  • 算法--移除k个数字
    classSolution:defremoveknums(self,nums,k):"""从表示数字的字符串中移除k个最小的数字。:paramnums:表示数字的字符串:paramk:需要移除的数字个数:return:移除k个最小数字后的字符串"""s......
  • AI智能分析视频分析网关周界入侵算法详解
    随着科技的迅猛发展和安全需求的不断提升,智能监控系统正逐渐成为维护公共安全的重要手段。其中,视频分析网关作为这一系统的核心组成部分,凭借其先进的视频处理和智能分析功能,正在有效提升安防监控的效率和准确性。本文将深入探讨AI智能分析视频分析网关的工作原理、相较传统监控方......
  • 算法日记 31 day 动态规划(01背包)
    继续来看动态规划中01背包的题目。题目:最后一块石头的重量II1049.最后一块石头的重量II-力扣(LeetCode)有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x ......
  • 简单的Dijkstra算法运用
    Dijkstra算法常用于求单源点最短路径问题基本思想将顶点集合V分成两个集合,一类是生长点的集合S,包括源点和已经确定最短路径的顶点;另一类是非生长点的集合V—S,包括所有尚未确定最短路径的顶点,并使用一个待定路径表,存储当前从源点V到每个非生长点V的最短路径。 Dijkstra算......
  • NVR接入录像回放平台EasyCVR视频融合平台加油站监控应用场景与实际功能
    在现代社会中,加油站作为重要的能源供应点,面临着安全监管与风险管理的双重挑战。为应对这些问题,安防监控平台EasyCVR推出了一套全面的加油站监控方案。该方案结合了智能分析网关V4的先进识别技术和EasyCVR视频监控平台的强大监控功能,实现了对加油站各个区域的实时监测与智能预警。......
  • 【MATLAB代码】基于IMM(Interacting Multiple Model)算法的目标跟踪,所用模型:CV、CA、CT
    文章目录3个模型的IMM(代码简介)源代码运行结果代码介绍总结3个模型的IMM(代码简介)本MATLAB代码实现了基于IMM(InteractingMultipleModel)算法的目标跟踪。它使用三种不同的运动模型(匀速直线运动、左转弯和右转弯)来预测目标的位置,并通过卡尔曼滤波进行状态估计。源代......
  • PHP顺序查找和二分查找(也叫做折半查找)算法
    顺序查找(线性查找)顺序查找是一种简单直观的查找算法,从数组的第一个元素开始,依次比较每个元素,直到找到目标元素或数组结束。<?phpfunctionlinearSearch($array,$target){$length=count($array);for($i=0;$i<$length;$i++){if($array[$i]==......
  • PHP二维数组排序算法函数
    以使用PHP内置的array_multisort()函数来对二维数组进行排序。array_multisort()函数可以对多个数组或多维数组的一个或多个列进行排序。下面是一个示例函数,该函数可以对二维数组按指定列进行排序:<?phpfunctionsort2DArrayByColumn(&$array,$columnKey,$sortOrder=SORT_......