当前位置: 首页 > news >正文

深圳哪里有做网站的重庆网站建设与制作

深圳哪里有做网站的,重庆网站建设与制作,北京科技公司名单,网络营销方式对比及分析论文目录 加油站(medium) 题目解析 讲解算法原理 编写代码 单调递增的数字(medium) 题目解析 讲解算法原理 编写代码 加油站(medium) 题目解析 1.题目链接:. - 力扣(LeetCode&a…

目录

加油站(medium)

题目解析

讲解算法原理

编写代码

单调递增的数字(medium)

题目解析

讲解算法原理

编写代码


加油站(medium)

题目解析

1.题目链接:. - 力扣(LeetCode)

2.题目描述

在⼀条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有⼀辆油箱容量⽆限的的汽⻋,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油
cost[i] 升。你从其中的⼀个加油站出发,开始时油箱为空。
给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路⾏驶⼀周,则返回出发时加油站的编号,否则返回 -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升汽油。因此,⽆论怎样,你都不可能绕环路⾏驶⼀周。

提⽰:
◦ gas.length == n
◦ cost.length == n
◦ 1 <= n <= 10(5)
◦ 0 <= gas[i], cost[i] <= 10(4)

讲解算法原理

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

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 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;}
};

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;}
}

单调递增的数字(medium)

题目解析

1.题目链接:. - 力扣(LeetCode)

2.题目描述

当且仅当每个相邻位数上的数字x和y满⾜x<=y时,我们称这个整数是单调递增的。给定⼀个整数n,返回⼩于或等于n的最⼤数字,且数字呈单调递增。
• ⽰例1:
输⼊:n=10
输出:9
• ⽰例2:
输⼊:n=1234
输出:1234
• ⽰例3:
输⼊:n=332
输出:299
• 提⽰:
0<=n<=10^9

讲解算法原理

解法(贪⼼):
a. 为了⽅便处理数中的每⼀位数字,可以先讲整数转换成字符串;b. 从左往右扫描,找到第⼀个递减的位置;
c. 从这个位置向前推,推到相同区域的最左端;d. 该点的值 -1 ,后⾯的所有数统⼀变成 9 。

编写代码

c++算法代码:

class Solution
{
public:int monotoneIncreasingDigits(int n) {string s = to_string(n); // 把数字转化成字符串 int i = 0, m = s.size();// 找第⼀个递减的位置while(i + 1 < m && s[i] <= s[i + 1]) i++;if(i + 1 == m) return n; // 判断⼀下特殊情况 // 回推while(i - 1 >= 0 && s[i] == s[i - 1]) i--;s[i]--;for(int j = i + 1; j < m; j++) s[j] = '9';return stoi(s);}
};

java算法代码:

class Solution
{public int monotoneIncreasingDigits(int n) {// 把数字转化成字符串char[] s = Integer.toString(n).toCharArray();int i = 0, m = s.length;// 找第⼀个递减的位置while(i + 1 < m && s[i] <= s[i + 1]) i++;if(i == m - 1) return n; // 特判⼀下特殊情况// 回退while(i - 1 >= 0 && s[i] == s[i - 1]) i--;s[i]--;for(int j = i + 1; j < m; j++) s[j] = '9';return Integer.parseInt(new String(s));}
}

http://www.tj-hxxt.cn/news/65135.html

相关文章:

  • 昆山高端网站建设公司网络推广的优势
  • 公司网络维护外包价格重庆高端网站seo
  • 外贸b2c网站长安seo排名优化培训
  • 东莞本地招聘网站无代码建站
  • 做私人网站免费发布广告信息平台
  • 网站开发技术合作协议书推广代理平台登录
  • 深圳全胜专业网站建设制作企业网站
  • 怎样推广公司的网站友情链接工具
  • 赚钱链接网站合肥网站优化平台
  • 通用网站建设需求分析国家中医药管理局
  • 动态网站开发的实训报告网站统计
  • 黄石有哪些做视觉网站的公司北京seo优化排名
  • 网站建设教程搭建芽嘱湖南岚鸿信赖学技术的培训学校
  • wordpress支付查看更多seo门户网
  • 南通教育平台网站建设搜狗收录入口
  • 贵阳高端网站设计公司今日最新消息新闻
  • wordpress 常用小工具栏标题seo是什么意思
  • 网站商城微信支付接口申请网站广告投放价格表
  • 怎么选择顺德网站建设百度风云榜排行榜
  • 页面设计排版网站百度客户端电脑版下载
  • 云开发环境阜新网站seo
  • 云南做企业建站百度推广怎么优化排名
  • 四川省法治政府建设网站网络推广网络营销软件
  • 企业网站php模版网络推广网站公司
  • 网上做兼职的网站有哪些工作网络营销课程ppt
  • 医院网站建设的意义手机百度关键词优化
  • 新加坡做鸭网站沧州网站优化
  • 郑州网站 建设seo自动优化软件安卓
  • 帝国cms 网站地图 xml网络营销热点事件案例分析
  • 静态网站如何做自适应移动端网站推广优化平台