题目
- 生成平衡数组的方案数
- 完成所有任务的最少初始能量
思路与算法
- 第一题 删除的索引为i,删除之后(0- i-1)之间的子数组的奇偶和不变,而(i+1,end)的奇偶索引交换
- 贪心加自定义排序,代码参考自zero神的题解。
代码实现
- 生成平衡数组的方案数
class Solution {
public int waysToMakeFair(int[] nums) {
int OddSum = 0;int EvenSum = 0;
int leftOddSum = 0; int leftEvenSum = 0;
int rightOddSum = 0;int rightEvenSum = 0;
int res = 0;
int len = nums.length;
for (int i = 0; i < len; i++) {
if(i % 2 == 0)
EvenSum += nums[i];
else
OddSum += nums[i];
}
for (int i = 0; i < len; i++) {
if (i % 2 != 0)
leftOddSum += nums[i];
else
leftEvenSum += nums[i];
rightOddSum = EvenSum - leftEvenSum;
rightEvenSum = OddSum - leftOddSum;
if (i % 2 != 0)
rightOddSum -= nums[i];
else
rightEvenSum -= nums[i];
if ((leftEvenSum + rightEvenSum) == (leftOddSum + rightOddSum)) {
res++;
}
}
return res;
}
}
- 完成所有任务的最少初始能量
class Solution {
public:
int minimumEffort(vector<vector<int>>& tasks) {
sort(tasks.begin(), tasks.end(), [](const vector<int> &a, const vector<int> &b) {
return a[1] - a[0] > b[1] - b[0]; } );
int ans = 0;
int cur_cost = 0;
for (int i = 0; i < tasks.size(); i++) {
ans = max(ans, cur_cost + tasks[i][1]);
cur_cost += tasks[i][0];
}
return ans;
}
};
写在最后
- 冲!