差分_.cpp
class Solution {
public:
void getDiffVec(vector<int>& diff, int n) {
for (int i = 0; i < n + 2; i++) {
diff[i] = 0;
}
}
void modfiyDiff(vector<int>& diff, int begin, int end, int num) {
diff[begin] += num;
diff[end + 1] -= num;
}
vector<int> resVec;
vector<int> getResultVec(vector<int> &diff, int n) {
int seat = 0;
for (int i = 1; i < n + 1; i++) {
seat += diff[i];
resVec.push_back(seat);
}
return resVec;
}
vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) {
vector<int> diff(n + 2, 0);
for (auto value : bookings) {
int begin = value[0];
int end = value[1];
int num = value[2];
modfiyDiff(diff, begin, end, num);
}
vector<int> vec = getResultVec(diff, n);
return vec;
}
};
差分_二维数组.cpp
公司开发部门团建时,你被邀请参与一个小游戏。游戏开始时,你们会获得一个大小为 n x m 的矩阵 matrixA。
游戏的规则为:你们每个人都需要计算出一个和矩阵 matrixA 具有相同维度的矩阵 matrixB(即矩阵 matrixB 的大小也为 n x m),
而矩阵 matrixB 中的每个元素 matrixB[i, j] 都对应了矩阵 matrixA 中元素 matrixA[i, j] 左上方(包含 matrixA[i, j] )的所有元素之和。
例1:
输入:matrixA = [ [ 3, 7, 1],
[ 2, 4, 0],
[ 9, 4, 2] ]
输出:matrixB = [ [ 3, 10, 11],
[ 5, 16, 17],
[14,29, 32] ]
解释:matrixB [1,1] = 3 + 2 + 7 + 4 = 16
class NumMatrix {
public:
vector<vector<int>> vec;
NumMatrix(vector<vector<int>>& matrix) {
int row = matrix.size();
int col = matrix[0].size();
for (int i = 0; i < row; i++) {
int sum = 0;
vector<int> rowVec;
for (int j = 0; j < col; j++) {
sum += matrix[i][j];
rowVec.push_back(sum);
}
vec.push_back(rowVec);
}
}
int sumRegion(int row1, int col1, int row2, int col2) {
int res = 0;
for (int i = row1; i <= row2; i++) {
res += (col1 == 0 ? vec[i][col2] : (vec[i][col2] - vec[i][col1 - 1]));
}
return res;
}
};
差分_求范围和.cpp
class NumArray {
public:
vector<int> diff;
vector<int> res;
NumArray(vector<int>& nums) {
int sum = nums[0];
res.push_back(sum);
for (int i = 1; i < nums.size(); i++) {
sum += nums[i];
res.push_back(sum);
}
}
int sumRange(int left, int right) {
return left == 0 ? res[right] : res[right] - res[left];
}
};
差分_上下车(带模板).cpp
class Solution {
public:
void getDiffVec(vector<int>& diff, int n) {
for (int i = 0; i <= n + 1; i++) {
diff[i] = 0;
}
}
void modfiyDiff(vector<int>& diff, int begin, int end, int num) {
diff[begin] += num;
diff[end] -= num;
}
vector<int> resVec;
vector<int> getResultVec(vector<int> &diff, int n) {
int seat = 0;
for (int i = 0; i <= n; i++) {
seat += diff[i];
resVec.push_back(seat);
}
return resVec;
}
bool carPooling(vector<vector<int>>& trips, int capacity) {
vector<int> diff(1001, 0);
for (auto trip : trips) {
int value = trip[0];
int begin = trip[1];
int end = trip[2];
modfiyDiff(diff, begin, end, value);
}
vector<int> res = getResultVec(diff, 1000);
for (auto value : res) {
if (value > capacity) {
return false;
}
}
return true;
}
};
int main()
{
vector<vector<int>> vec = {
{9,0,1},
{3,3,7},
};
Solution *s = new Solution();
bool res = s->carPooling(vec, 4);
system("pause");
return 0;
}