1、 java实现(提交失败因为内存太大,因为自己想出来的舍不得扔。。底下附别人代码)
1、首先定义一个二维数组,将bookings
数组里面的内容全部转化为二维数组形式
2、首先先算出第一个航班的数量就是第一行加起来。
3、从第i(i>=2)个航班用i遍历就是从第1行到i-1行的所有,列值为i以后的所有加起来再加上第i行所有
4、比如第二次航班是
5、第三次航班
6、第四次航班
package test;
public class Test {
public static void main(String[] args) {
int[][] bookings = {{1,2,10},{2,3,20},{2,5,25}};
new Solution().corpFlightBookings(bookings, 5);
}
}
class Solution {
public int[] corpFlightBookings(int[][] bookings, int n) {
int[] result = new int[n];
int[][] temp = new int[n+1][n+1];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
temp[i][j] = 0;
for(int i=0;i<bookings.length;i++)
{
temp[bookings[i][0]][bookings[i][1]] += bookings[i][2];
}
for(int i=0;i<n;i++)
{
result[i] = 0;
}
for(int j=1;j<=n;j++) result[0]+=temp[1][j];
for(int m=2;m<=n;m++)
{
for(int i=1;i<m;i++)
for(int j=m;j<=n;j++)
{
result[m-1] += temp[i][j];
}
for(int j=1;j<=n;j++)
result[m-1] += temp[m][j];
}
return result;
}
}
2、别人写的很精妙
class Solution {
public int[] corpFlightBookings(int[][] bookings, int n) {
int[] res = new int[n];
int start = 0, end = 0, add = 0;
for (int i = 0; i < bookings.length; i++) {
start = bookings[i][0];
end = bookings[i][1];
add = bookings[i][2];
for (int j = start - 1; j < end; j++) {
res[j] += add;
}
}
return res;
}
}