Panson-Weekly-006
日拱一卒
1 一周见闻
1.1 技术文章
1.2 泛互联网文章
2 技术总结
3 Algorithm(算法题)
class Solution {
public int[] productExceptSelf(int[] nums) {
// 使用两个数组,分别保存当前元素的左乘积和右乘积
int n = nums.length;
int[] left = new int[n];
int[] right = new int[n];
left[0] = 1;
for(int i = 1; i < n; i++) {
left[i] = left[i - 1] * nums[i - 1];
}
right[n - 1] = 1;
for(int j = n - 2; j >= 0; j--) {
right[j] = right[j + 1] * nums[j + 1];
}
for(int i = 0; i < n; i++) {
nums[i] = left[i] * right[i];
}
return nums;
}
}
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
// 如果从 x 到 y 无法到达,那么从 x 与 y 间任何一个加油站出发都无法到达 y。
// 题目保证如果有解则必为唯一解
int n = gas.length;
int sum = 0;
for(int i = 0; i < n; i++) {
sum += (gas[i] - cost[i]);
}
if(sum < 0) {
return -1;
}
// 必定有解
sum = 0;
int i = 0;
int from = 0;
while(i < n){
sum += (gas[i] - cost[i]);
if(sum < 0) {
from = i + 1;
i = i + 1;
sum = 0;
} else {
i++;
}
}
return from;
}
}