店商网站设计,网站链接文字,株洲网站制作公司在哪里,网站定制134. 加油站
使用三个变量total、cur和start来记录总剩余油量、当前剩余油量和起始加油站的索引。在遍历加油站数组的过程中#xff0c;不断更新cur为当前剩余油量#xff0c;并根据cur的值判断是否需要更换起始加油站。
如果cur小于0#xff0c;说明从当前起点到当前加油…134. 加油站
使用三个变量total、cur和start来记录总剩余油量、当前剩余油量和起始加油站的索引。在遍历加油站数组的过程中不断更新cur为当前剩余油量并根据cur的值判断是否需要更换起始加油站。
如果cur小于0说明从当前起点到当前加油站无法行驶需要将起始加油站更新为下一个加油站即start i 1并重置cur为0。同时累加总剩余油量total。
class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int total 0, cur 0, start 0;for (int i 0; i gas.length; i) {cur gas[i] - cost[i];if (cur 0) {start i 1;cur 0;}total gas[i] - cost[i];}return total 0 ? start : -1;}
}
135. 分发糖果
经典难题需要使用两个数组lefts和rights来分别记录每个学生左边和右边的糖果数量然后计算总共需要的糖果数量res。从左向右遍历所有学生对于每个学生如果其评分比左边的学生高那么他应该比左边的学生获得更多糖果因此糖果数量为左边学生的糖果数量加一否则糖果数量为1。将每个学生的糖果数量记录在lefts数组中。右边同理。
class Solution {public int candy(int[] ratings) {int[]leftsnew int[ratings.length];int[]rightsnew int[ratings.length];int res0;for (int i 0; i rights.length; i) {if(i0 ratings[i-1]ratings[i]){lefts[i]lefts[i-1]1;}else{lefts[i]1;}}for (int i rights.length-1; i 0; i--) {if(irights.length-1 ratings[i]ratings[i1]){rights[i]rights[i1]1;}else{rights[i]1;}reslefts[i]rights[i]?lefts[i]:rights[i];}return res;}
}
860.柠檬水找零
???怎么又插了道简单题像大一的机试按照常识优先找回10块的
class Solution {public boolean lemonadeChange(int[] bills) {int five 0, ten 0;for (int i 0; i bills.length; i) {if (bills[i] 5) five;else if (bills[i] 10) {five--;ten;}else if (bills[i] 20) {if (ten 0) {five--;ten--;}else {five - 3;}}if (five 0 || ten 0) return false;}return true;}
}
406.根据身高重建队列
题目不好看懂对于每个元素 nums它是一个一维数组其中 nums[0] 表示身高nums[1] 表示前面身高大于等于当前身高的人数。然后通过 queue.add(nums[1], nums) 将该元素插入到队列 queue 的指定位置上按照 nums[1] 的值插入。
class Solution {public int[][] reconstructQueue(int[][] people) {Arrays.sort(people,(a,b)-{if(a[0] b[0]) return a[1]-b[1];else return b[0]-a[0];});Listint[] queue new LinkedList();for(int[] nums:people) queue.add(nums[1],nums);return queue.toArray(new int[people.length][2]);}
}