[Algorithm][贪心][K次取反后最大化的数组和][身高排序][优势洗牌][最长回文串]详细讲解

目录

  • 1.K 次取反后最大化的数组和
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 2.身高排序
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 3.优势洗牌
    • 1.题目链接
    • 2.算法思路详解
    • 3.代码实现
  • 4.最长回文串
    • 1.题目链接
    • 2.代码实现


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

1.题目链接

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

2.算法原理详解

  • 思路:分情况讨论,设整个数组中负数的个数为m
    • m > k:把前k小负数,转化成正数
    • m == k:把所有的负数转化成正数
    • m < k
      • 先把所有的负数变成正数
      • 讨论k - m的奇偶性
        • 偶数:直接忽略
        • 奇数:挑选当前数组中最小的数,变成负数

3.代码实现

int largestSumAfterKNegations(vector<int>& nums, int k) 
{int n = nums.size(), m = 0, minElem = INT_MAX, ret = 0;// 求负数个数 & 最小值for(const auto& x : nums){if(x < 0){m++;}minElem = min(minElem, abs(x));}// 分类讨论if(m > k){sort(nums.begin(), nums.end());for(int i = 0; i < k; i++){ret += -nums[i];}for(int i = k; i < n; i++){ret += nums[i];}}else{// 把所有负数变成正数for(const auto& x : nums){ret += abs(x);}if((k - m) % 2){ret -= 2 * minElem;}}return ret;
}

2.身高排序

1.题目链接

  • 身高排序

2.算法原理详解

  • 解法一:创建二元组
    • 创建一个新的数组pair<int, string>
    • 对新的数组排序
    • 按照顺序把名字提取出来即可
  • 解法二:利用哈希表存下映射关系
    • 先用哈希表存下映射关系<身高,名字>
    • 对身高数组排序
    • 根据排序后的结果,在哈希表里面找名字即可
    • 缺点:不可存重复的KEY值
      • 解决方法map<int, string[]>
      • 可以,但仍略显复杂
  • 解法三对下标排序(很常用的方法)
    • 创建一个下标数组
    • 仅需对下标数组排序
    • 根据下标数组排序后的结果,找到原数组的信息
      请添加图片描述

3.代码实现

vector<string> sortPeople(vector<string>& names, vector<int>& heights) 
{int n = names.size();vector<int> index(n); // 下标数组for(int i = 0; i < n; i++){index[i] = i;}// 对下标进行排序sort(index.begin(), index.end(), [&](int i, int j){return heights[i] > heights[j];});// 从下标数组取结果vector<string> ret;for(const auto& x : index){ret.push_back(names[x]);}return ret;
}

3.优势洗牌

1.题目链接

  • 优势洗牌

2.算法思路详解

  • 思路
    • 排序
      • nums1直接排序
      • nums2下标排序 —> 为了不影响原数组的相对顺序
    • 如果比不过,就去拖累对面最强的一个
    • 如果能比过,直接比即可
      请添加图片描述

3.代码实现

vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2) 
{int n = nums1.size();vector<int> index(n);for(int i = 0; i < n; i++){index[i] = i;}// 排序sort(nums1.begin(), nums1.end());sort(index.begin(), index.end(), [&](int i, int j){return nums2[i] < nums2[j];});// 田忌赛马vector<int> ret(n);int left = 0, right = n - 1;for(const auto& x : nums1){if(nums2[index[left]] < x){ret[index[left++]] = x;}else{ret[index[right--]] = x;}}return ret;
}

4.最长回文串

1.题目链接

  • 最长回文串

2.代码实现

int longestPalindrome(string s) 
{int hash[128] = {0};for(const auto& ch : s){hash[ch]++;}int ret = 0;for(const auto& x : hash){ret += x / 2 * 2; // 奇偶混合处理}return ret < s.size() ? ret + 1 : ret;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java课程设计:基于Javaweb的校园订餐系统

文章目录 一、项目介绍二、项目技术栈三、核心代码四、项目展示五、源码获取 一、项目介绍 在当今互联网高速发展的时代,大学校园内的学生生活正在发生着翻天覆地的变化。其中,校园内的餐饮服务无疑是亟需改革和创新的领域之一。 传统的校园食堂模式,往往存在就餐高峰时段拥挤…

DELL服务器插入新磁盘、创建虚拟磁盘、挂载磁盘步骤

文章目录 一、磁盘清理&#xff08;可选&#xff0c;针对新硬盘是Foreign状态&#xff09;1、进入VD Mgmt2、清理新硬盘配置 二、创建虚拟磁盘1、进入Device Settings2、创建虚拟磁盘 三、挂载磁盘到系统1、分区磁盘&#xff08;注意实际磁盘的名称&#xff09;2、格式化分区3、…

Java web应用性能分析之【prometheus+Grafana监控springboot服务和服务器监控】

Java web应用性能分析之【java进程问题分析概叙】-CSDN博客 Java web应用性能分析之【java进程问题分析工具】-CSDN博客 Java web应用性能分析之【jvisualvm远程连接云服务器】-CSDN博客 Java web应用性能分析之【java进程问题分析定位】-CSDN博客 Java web应用性能分析之【…

【数学代码】幂

Hello!大家好&#xff0c;我是学霸小羊&#xff0c;今天来讲讲幂。 求几个相同因数的积的运算&#xff0c;叫做乘方&#xff0c;乘方的结果叫做幂。 a^n&#xff0c;读作 “ a的n次方 ” 或 “ a的n次方幂”&#xff0c;a叫做底数&#xff0c;n叫做指数。 对于底数、指数和幂…

Stm32超声波测距实验

一.任务需求 1. 采用stm32F103和HC-SR04超声波模块&#xff0c; 使用标准库或HAL库 定时器中断&#xff0c;完成1或2路的超声波障碍物测距功能。 2. 当前智能汽车上一般配置有12路超声波雷达&#xff0c;这些专用超声波雷达内置了MCU&#xff0c;直接输出数字化的测距结果&am…

【QT Creator软件】解决中文乱码问题

QT Creator软件解决中文乱码问题 问题描述&#xff1a;Qtcreator安装好后打印中文在控制台输出乱码 在网上也查找了修改编辑器的默认编码为UTF-8&#xff0c;但是仍然没有任何作用&#xff0c;于是有了以下的解决方案 原因剖析&#xff1a;因为项目的编码与控制台的编码不一致…

Windows10安装配置Docker客户端和WSL2与Hyper-V虚拟机

一、需求说明 需要在Windows系统中安装配置Docker的客户端,方便直接管理配置docker镜像容器内容。 二、Windows10安装Docker客户端步骤 2.1、下载安装Docker客户端 对于Windows 10以下的用户,推荐使用Docker Toolbox Windows安装文件:http://mirrors.aliyun.com/docker-…

16.大模型分布式训练框架 Microsoft DeepSpeed

微调、预训练显存对比占用 预训练LLaMA2-7B模型需要多少显存&#xff1f; 假设以bf16混合精度预训练 LLaMA2-7B模型&#xff0c;需要近120GB显存。即使A100/H100&#xff08;80GB&#xff09;单卡也无法支持。 为何比 QLoRA多了100GB&#xff1f;不妨展开计算下显存占用&…

给类设置serialVersionUID

第一步打开idea设置窗口&#xff08;setting窗口默认快捷键CtrlAltS&#xff09; 第二步搜索找到Inspections 第三步勾选主窗口中Java->Serializations issues->下的Serializable class without serialVersionUID’项 &#xff0c;并点击“OK”确认 第四步鼠标选中要加…

DearLicy主题 | 小众化小清新风格的博客主题源码 | Typecho主题模版

DearLicy主题&#xff0c;一款小众化小清新风格的博客主题 主题支持Typecho所支持的所有版本PHP 简约、小众、优雅 安装教程 1.将主题上传至/usr/themes/文件夹下解压 2.后台进行启用 3.访问前台查看效果 源码下载&#xff1a;https://download.csdn.net/download/m0_6604…

热门开源项目ChatTTS: 国内语音技术突破,实现弯道超车

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

python简单练习案例-石头剪刀布小游戏

&#x1f308;所属专栏&#xff1a;【python】 ✨作者主页&#xff1a; Mr.Zwq ✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01;…

IDEA SpringBoot整合Mybatis(保姆级教程,超详细!!!)

目录 1. 简介 2. 创建SpringBoot项目 3. Maven依赖引入 4. 创建mapper文件夹 5. 数据源和Mybatis配置 6. 工程启动类配置 7. 连接数据库和创建测试表 8. Mapper接口和XML自动生成 9. 接口测试 1. 简介 本博客将详细介绍在IDEA中&#xff0c;如何整合SpringBoot与Myba…

基于SSM+Jsp的在线教育资源管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

AI办公自动化:批量根据Excel表格内容制作Word文档

工作任务&#xff1a;Excel表格中有大量文本&#xff0c;根据这些文本自动生成word文档 在chatgpt中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;写一个Python脚本&#xff0c;具体步骤如下&#xff1a; 读取Excel文件&#xff1a;"F:\AI自媒体内容\AI视…

[leetcode]将二叉搜索树转化为排序的双向链表

. - 力扣&#xff08;LeetCode&#xff09; /* // Definition for a Node. class Node { public:int val;Node* left;Node* right;Node() {}Node(int _val) {val _val;left NULL;right NULL;}Node(int _val, Node* _left, Node* _right) {val _val;left _left;right _rig…

目标检测数据集 - 零售食品LOGO检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;零售食品 LOGO 检测数据集&#xff0c;真实零售食品 LOGO 高质量商品图片数据&#xff0c;数据集含常见零售食品 LOGO 图片&#xff0c;包括饮料类、酒类、调味品类、膨化饼干类、巧克力类、常见零食类等等。数据集类别丰富&#xff0c;标注标签包含 150…

DeepSORT(目标跟踪算法)中卡尔曼增益的理解

DeepSORT&#xff08;目标跟踪算法&#xff09;中卡尔曼增益的理解 flyfish 先用最简单的例子来理解卡尔曼增益 公式 (1) 首先&#xff0c;通过多次测量一个物理量&#xff0c;并使用取平均值的方式来计算其真实值&#xff1a; x ^ k 1 k ( z 1 z 2 ⋯ z k ) \hat{x}_…

python-基础篇-函数-在py中的长相

文章目录 整体长相长相要求 整体长相 怎么自定义函数&#xff1f; 要知道怎么定义函数&#xff0c;就要知道函数的组成部分是怎样的。 def 函数名(参数1&#xff0c;参数2....参数n):函数体return 语句这就是 Python 函数的组成部分。 长相要求 所以自定义函数&#xff0c…

父亲节:我要做爸爸的健康监督员

父亲节将至&#xff0c;总想着能为爸爸做些什么&#xff0c;来表达我们的感激与关爱。在这个特殊的日子里&#xff0c;成为爸爸的健康监督员&#xff0c;用华为 Watch 4 的智慧健康功能&#xff0c;任何时刻都可以关注爸爸的健康状况&#xff0c;放心又安心了。 用一键微体检…