做挂的网站,wordpress静态页面,wordpress下一行怎样挨近,甘肃艾欧网络科技有限公司Leetcode1005:
题目描述#xff1a;
给你一个整数数组 nums 和一个整数 k #xff0c;按以下方法修改该数组#xff1a;
选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
以这种方式修改数组后#xff0c;返回数…Leetcode1005:
题目描述
给你一个整数数组 nums 和一个整数 k 按以下方法修改该数组
选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
以这种方式修改数组后返回数组 可能的最大和 。
代码及注释:
class Solution {
public:int largestSumAfterKNegations(vectorint nums, int k) {//使用优先队列存储值最小的K个元素priority_queuepairint, intp;for (int i 0; i nums.size(); i) {//存储值最小因为默认是大根堆所以存储负值p.push(pairint, int(-nums[i], i));}//对值最小的值取反//1.如果存在负数优先取反最小的负数可以使得和变大//2.不存在负数但有0值取反0值可以让数组值和不变//3.只存在非负整数取反最小的值可以使得代价最小//执行k次while (!p.empty() k--) {pairint, intpp p.top();p.pop();//如果只有0和正整数可以对0取反k次因此可以直接跳出循环if (nums[pp.second] 0)break;else nums[pp.second] -nums[pp.second];pp.first -pp.first;//完成取反得到新的值重新加入p.push(pp);}int sum 0;for (int i 0; i nums.size(); i) {sum nums[i];}return sum;}
};
Leetcode134:
题目描述
在一条环路上有 n 个加油站其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发开始时油箱为空。
给定两个整数数组 gas 和 cost 如果你可以按顺序绕环路行驶一周则返回出发时加油站的编号否则返回 -1 。如果存在解则 保证 它是 唯一 的。
代码及注释:
class Solution {
public:int canCompleteCircuit(vectorint gas, vectorint cost) {int n gas.size();//处理后的gas代表gas[i]从第i个加油站到达第(i1)个加油站所增加/减少的油for (int i 0; i n; i) {gas[i] - cost[i];}//由于起点唯一因此如果存在等于0可以做起点那只可能是只有一个元素if (n 1 gas[0] 0)return 0;//对每个加油站都尝试作为起点for (int i 0; i n;) {//作为起点的加油站必须能到达下一个加油站本来就是没有油//gas[i]为负数就不可能可以让i作为起点//大于0才能作为起点if (gas[i] 0) {//记录到达加油站i1还剩多少油int sum gas[i];int begin i;//0 才能说明可以到达 i1while (sum 0) {//继续向后走i (i 1) % n;sum gas[i];//直到又回到起点完成搜索if (sum 0 i begin)return begin;}//剪枝if (i begin i n)continue;i begin 1;}else {i;}}return -1;}
};
Leetcode135:
题目描述
n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。
你需要按照以下要求给这些孩子分发糖果
每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果计算并返回需要准备的 最少糖果数目 。
代码及注释:
class Solution {
public:int candy(vectorint ratings) {int n ratings.size();int* ans new int[n];//第一个孩子先给一个糖果ans[0] 1;//边走边发糖果for (int i 1; i n; i) {//如果当前孩子评分前一个孩子if (ratings[i] ratings[i - 1]) {//比前一个孩子多发一个糖果即可ans[i] ans[i - 1] 1;}//如果前一个孩子评分else {//给一个糖果就行ans[i] 1;int j i - 1;//前一个孩子也是只有一个糖果前一个孩子评分当前孩子评分if (ans[j] 1 ratings[j] ratings[i]) {//i-1孩子多发一个糖果ans[j] 1;j--;//往前走回溯while (j 0 ratings[j] ratings[j 1] ans[j] ans[j 1])ans[j] ans[j 1] 1, j--;}}}int sum 0;for (int i 0; i n; i) {sum ans[i];}return sum;}
};