当前位置: 首页 > news >正文

php网站建设案例教程视频教程怎么做好公司官网推广

php网站建设案例教程视频教程,怎么做好公司官网推广,重庆城市管理学院网站,网站会员系统源码题目 1005 K 次取反后最大化的数组和 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数组 可…

题目

1005 K 次取反后最大化的数组和

给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:

选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。

重复这个过程恰好 k 次。可以多次选择同一个下标 i 。

以这种方式修改数组后,返回数组 可能的最大和 。

示例 1:

输入:nums = [4,2,3], k = 1

输出:5

解释:选择下标 1 ,nums 变为 [4,-2,3] 。

示例 2:

输入:nums = [3,-1,0,2], k = 3

输出:6

解释:选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2] 。

示例 3:

输入:nums = [2,-3,-1,5,-4], k = 2

输出:13

解释:选择下标 (1, 4) ,nums 变为 [2,3,-1,5,4] 。

来源:力扣1005. K 次取反后最大化的数组和


思路(注意事项)

思路一:建立小根堆,每次修改堆顶(即最小值)。
思路二:贪心(条件排序)


纯代码1

class Solution {
public:int largestSumAfterKNegations(vector<int>& nums, int k) {priority_queue<int, vector<int>, greater<int>> q;for (int i = 0; i < nums.size() ; i ++) q.push(nums[i]);int ans = 0;for (int i = 0 ;i < k; i ++){int t = - q.top();q.pop();q.push(t);}while(!q.empty()) ans += q.top(), q.pop();return ans;}
};

题解1(加注释)

class Solution {
public:int largestSumAfterKNegations(vector<int>& nums, int k) {// 定义一个最小堆(优先队列),用于存储数组中的元素priority_queue<int, vector<int>, greater<int>> q;// 将数组中的所有元素放入最小堆for (int i = 0; i < nums.size(); i++) q.push(nums[i]);// ans 用于存储最终的累加和int ans = 0;// 进行 k 次取反操作for (int i = 0; i < k; i++) {// 取出堆顶元素(当前最小的元素)int t = -q.top();// 将堆顶元素弹出q.pop();// 将取反后的元素重新放入堆中q.push(t);}// 计算堆中所有元素的和while (!q.empty()) {ans += q.top(); // 取出堆顶元素并累加到 ansq.pop();        // 弹出堆顶元素}// 返回最终的累加和return ans;}
};

纯代码2

class Solution {
static bool cmp (int a, int b)
{return abs(a) > abs(b);
}
public:int largestSumAfterKNegations(vector<int>& nums, int k) {sort (nums.begin(), nums.end(), cmp);int ans = 0;for (int i = 0; i < nums.size() && k > 0; i ++)if (nums[i] < 0) nums[i] = - nums[i], k --;if (k % 2 == 1) nums[nums.size() - 1] *= -1;for (auto i : nums) ans += i;return ans;}
};

题解2(加注释)

#include <vector>
#include <algorithm>
#include <cmath>class Solution {// 自定义比较函数,用于 std::sort 排序// 该函数的作用是按照绝对值从大到小对元素进行排序static bool cmp (int a, int b){// 返回绝对值大的元素排在前面return abs(a) > abs(b);}
public:// 该函数用于计算经过 k 次取反操作后数组元素的最大和int largestSumAfterKNegations(vector<int>& nums, int k) {// 使用自定义的 cmp 函数对数组进行排序,使得绝对值大的元素排在前面sort (nums.begin(), nums.end(), cmp);// 用于存储最终的数组元素和int ans = 0;// 遍历数组,优先将绝对值大的负数取反for (int i = 0; i < nums.size() && k > 0; i ++) {// 如果当前元素是负数,将其取反,并将 k 减 1if (nums[i] < 0) {nums[i] = - nums[i];k --;}}// 如果 k 还有剩余且为奇数,说明还需要进行一次取反操作// 此时对绝对值最小的元素进行取反,因为前面已经按绝对值从大到小排序,所以最后一个元素绝对值最小if (k % 2 == 1) {nums[nums.size() - 1] *= -1;}// 遍历数组,计算所有元素的和for (auto i : nums) {ans += i;}// 返回最终的和return ans;}
};
http://www.yayakq.cn/news/825091/

相关文章:

  • 潍坊网站制作工具网站类型的销售
  • 交友app网站建设浏览网站时弹出的广告是谁给做的
  • 设计网站推荐理由桐庐住房和城乡建设局 网站
  • 开发网站赚钱梦里做他千百度网站
  • 响应式网站有什么弊端网站建设ydwzjs
  • 网站推广的策略网站开发结构
  • 旅游美食网站模板广告设计免费
  • 网站开发过程的数据交互百度在线扫一扫
  • 西宁网站维护公司WordPress实现微信一键登录
  • 石家庄网站建设设计天津网站建设要多少钱
  • 内蒙古集宁建设厅官方网站青岛的互联网公司有哪些
  • 甘肃做网站的公司全国做网站的大公司
  • wordpress 新闻采集站宏升温岭网站建设
  • 建网站为什么要租空间网站排名seo软件
  • 建设网站是公司资产网站页面静态化方案
  • 建设一个微商的网站wordpress 混合移动app
  • 能做门户网站带论坛功能的cms网站做cpa
  • 那个网站上可以找代加工的订单做大连手机模板建站
  • 伊川县住房和城乡建设厅网站开发商虚假宣传可以退房吗
  • 网站导航结构设计全国分站seo
  • 馨端网站建设公司网站服务器租用
  • 电力建设期刊网站网站建设服务合同要交印花税吗
  • 做前端常用的网站及软件撩人的网站怎么做
  • 网站建设经费方案中国万网首页
  • 网站报错403电脑版网页游戏
  • 关于网站建设申请怎么设计网页背景图片
  • 山西省建设信息网站兰州网络推广效果
  • 做网站必须要注册公司么网站建设教程百度网盘
  • 水利建设相关网站辽宁建设工程信息网官网 可登录中项网
  • 肇庆网站制作软件网站如何解除绑定域名