[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,一经查实,立即删除!

相关文章

通过shell脚本检查web应用是否正常

#!/bin/bash #功能检查web应用是否正常 #作者:hp.li #日期:202406015 RUN_PATH$(dirname $(readlink -f "$0")) #检查web网站是否可和函数 check_url(){ #方法一&#xff1a;通过%{http_code}"参数获取状态码 #HTTP_CODE$(curl -o /dev/null --connect-timeou…

Golang 并发编程(Goroutine、Channels、Select、Sync、原子操作函数、Context、gpool)

文章目录 GoroutineSync&#xff08;同步机制&#xff09;sync.Mutex&#xff08;互斥锁&#xff09;sync.RWMutex&#xff08;读写互斥锁&#xff09;sync.WaitGroup&#xff08;等待组&#xff09;sync.Map&#xff08;并发安全的映射&#xff09; sync/atomic&#xff08;原…

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…

鸿蒙ArkTs 下载监听完成、进度 DownloadUtils工具类

import request from ohos.request; import fs from ohos.file.fs; import { BusinessError } from kit.BasicServicesKit; import { common, Want } from kit.AbilityKit;export class DownloadUtils{/*** 下载文件* param mContext* param url* param destFileDir* param fi…

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

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

LINUX中使用DT_MACHINE_START/MACHINE_START宏

LINUX中使用DT_MACHINE_START/MACHINE_START宏 DT_MACHINE_START宏 LINUX中用DT_MACHINE_START/MACHINE_START定义的MACH,并给出定义的各个成员函数在初始化过程中被调用的时机 比如,kernel/arch/arm/mach-vexpress/v2m.c: // SPDX-License-Identifier: GPL-2.0 #include…

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;不妨展开计算下显存占用&…

JAVA集合常见知识点总结

JAVA集合知识点总结 说说 List, Set, Queue, Map 四者的区别&#xff1f; List &#xff1a;存储的元素是有序的、可重复的。Set : 存储的元素不可重复的。Queue : 按特定的排队规则来确定先后顺序&#xff0c;存储的元素是有序的、可重复的。Map : 使用键值对&#xff08;ke…

给类设置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…

【名词解释】Unity中的3D物理系统:碰撞体

Unity中的3D物理系统中的碰撞体&#xff08;Collider&#xff09;是用于检测和响应物理碰撞的组件。以下是一些基本的名词解释和使用方法的代码示例&#xff1a; 名词解释&#xff1a; Collider&#xff1a;用于检测碰撞的组件&#xff0c;可以是球形、盒形、胶囊形或其他形状…

DocGraph相关概念

结合简化版的直观性和专业版的深度&#xff0c;我们可以得到一个既易于理解又包含专业细节的DocGraph概念讲解。 DocGraph概述&#xff08;简化版&#xff09; 想象DocGraph就像是文章信息的地图。它通过拆分文档、识别关键词、分析关系&#xff0c;并最终以图形方式呈现这些…

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

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

路由传参的方法?

1. 查询参数&#xff08;query&#xff09; 查询参数通常附加在URL的查询字符串中&#xff0c;例如&#xff1a;/user?id123。 首先&#xff0c;你需要在路由定义中不需要做特别设置。然后&#xff0c;在组件中&#xff0c;你可以通过$route.query对象来获取查询参数。 路由…

PHP入门教程2:控制结构和函数

PHP专栏&#xff08;第二篇&#xff09;&#xff1a;控制结构和函数 在上一篇文章中&#xff0c;我们学习了PHP的基础知识和基本语法。接下来&#xff0c;我们将深入探讨PHP的控制结构和函数&#xff0c;这是编写复杂程序的基础。本文将包含以下几个部分&#xff1a; 条件语句…