算法题:K 次取反后最大化的数组和(典型的贪心算法问题)

news2024/10/7 8:29:03

这道题没有看题解,直接提交,成绩超越99.5%,说明思路是优的。就是考虑的情况里面弯弯绕比较多,需要考虑全面一点。(本题完整题目附在了最后面)

具体思路如下:

1、首先排序,然后从最小的负数开始一一变为正数,如果遍历到正数了,而k的次数没用完,如果剩余的k是偶数次,则直接可以退出了;如果k是奇数次且nums内有0元素也可以直接退出程序;如果k是奇数次且nums里面没有0元素,则挑一个最小的正数,将其置为负数,其实也就是比较正在遍历到的数和前一个数的大小,小的那个就是nums数组里的最小正数。

2、还有一种情况就是,数组已经遍历完了,k没用完,这个也很简单,直接对数组的最后一个数,也就是数组里面最小非负数进行操作,如果其为0则直接退出,如果是k是偶数也可直接退出,如果k是奇数则将这个数置为负数。

3、最后对nums数组求和。

代码如下:

class Solution(object):
    def largestSumAfterKNegations(self, nums, k):
        nums.sort()
        for i in range(len(nums)):
            if k <= 0: break
            if nums[i] < 0:
                nums[i] = 0 - nums[i]
                k -= 1
            elif nums[i] == 0:
                k = 0
                break
            else:
                # 这里的 k & 1 是判断k是否为奇数的快速判断方法
                if nums[i] > nums[i - 1] and k & 1:  
                    nums[i - 1] = 0 - nums[i - 1]
                elif nums[i] <= nums[i - 1] and k & 1:
                    nums[i] = 0 - nums[i]
                k = 0
                break
        if k > 0 and k & 1:
            nums[-1] = 0 - nums[-1]
        return sum(nums)


if __name__ == '__main__':
    sol = Solution()
    # print(sol.largestSumAfterKNegations([2, -3, -1, 5, -4], 2))
    print(sol.largestSumAfterKNegations([-4, -2, -3], 4))

完整题目:

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] 。

提示:

  • 1 <= nums.length <= 10^4
  • -100 <= nums[i] <= 100
  • 1 <= k <= 10^4

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

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

相关文章

如何在 Spring Boot 中进行文件上传

在 Spring Boot 中进行文件上传 文件上传是Web应用程序中常见的功能之一&#xff0c;它允许用户将文件从客户端上传到服务器。Spring Boot提供了便捷的方式来处理文件上传&#xff0c;并且整合了Spring框架的强大功能&#xff0c;使文件上传变得相对简单。本文将介绍如何在Spr…

深度学习DAY2:n-gram

什么是LM(language model语言模型)&#xff1f; 引例&#xff1a; 1、统计机器学习时期的语言模型–语音识别 2、贝叶斯公式求P(s|A)——在有了语音信号的前提下是文本的概率 1 n-gram模型概述 n-gram模型是一种统计语言模型&#xff0c;用于建模文本数据中的语言结构。…

释放Sqlite数据库占用的多余空间

当删除sqlite数据库中的数据之后&#xff0c;会发现内容确实删除掉了&#xff0c;但是sqlite数据库占用的磁盘大小没有缩小&#xff0c;那是因为&#xff0c;删除数据后&#xff0c;未使用的磁盘空间被添加到一个内在的“空闲列表”中用于储存你下次插入的数据&#xff0c;磁盘…

使用yum 安装mysql数据库

h这是参照msyql官方文档写的&#xff08;网上的教程五花八门&#xff0c;各有各的特色和技巧&#xff0c;不过还是以官方文档为主要参考最靠谱&#xff09; 注意 : 适用于第一次安装的情况&#xff0c;系统上已经有之前安装过的版本的话&#xff0c;官方文档同一章也有升级、替…

【广州华锐互动】AR轨道交通综合教学平台的应用

轨道交通是一种复杂且精密的系统&#xff0c;涵盖了众多技术和工程学科&#xff0c;包括机械、电气和计算机科学等。对于学生来说&#xff0c;理解和掌握这些知识是一项挑战。然而&#xff0c;AR技术的出现为解决这一问题提供了可能。 通过AR技术&#xff0c;教师可以创建生动、…

Linux ❀ 磁盘IO较大故障告警排查确认方法

文章目录 1、iotop2、iostat3、磁盘压力测试 问题描述&#xff1a;在日常运维工作中&#xff0c;经常会遇到Linux服务器出现Disk磁盘I/O&#xff08; I/O 英文全称是 Input/Output&#xff0c;中文译为 输入与输出&#xff0c;通常指存储器与其他设备之间的数据交换操作&#x…

sip网络话筒主机SIP桌面式对讲广播主机

sip网络话筒主机SIP桌面式对讲广播主机 SV-8003VP是我司的一款SIP桌面式对讲主机&#xff0c;具有10/100M以太网接口&#xff0c;配置了麦克风输入和扬声器输出&#xff0c;还配置多达22个按键和2.8英寸液晶显示屏&#xff0c;可以配合SIP服务器使用。SV-8003VP网路寻呼话筒可以…

SAP SD定价过程 含税未税 最大区别

SAP SD定价过程 含税&未税 最大区别 最大区别应该为&#xff0c;税条件类型&#xff1a; 含税一般用 MWSI 未税一般用 MWST

HarmonyOS/OpenHarmony原生应用开发-华为Serverless认证服务说明(二)

一、支持HarmonyOS(Stage模型-API9)应用的账户注册登录方式 文档中的TS作者认为就是ArkTS之意。暂时支持四种模式&#xff0c;手机、邮箱、匿名、自有账户。 二、暂时不支持HarmonyOS(Stage模型-API9)应用的账户注册登录方式 包括华为账户注册登录&#xff0c;HarmonyOS…

使用Fillder的一点总结

文章目录 最近使用Fillder的一点总结一、前言二、关于FildderScript的吐槽三、关于filters四、关于快捷方式的吐槽五、关于断点 最近使用Fillder的一点总结 纯乱搞&#xff0c;但是不得不说Fillder确实厉害 一、前言 安装请在官网下载 简单食用方法可参阅&#xff1a;https…

C#实现OPC DA转OPC UA服务器

运行软件前提前安装好OPC运行组件&#xff1a; 为方便演示&#xff0c;提前准备好了一个DAServer服务器&#xff1a; 接下来开始配置&#xff1a; 该软件主要实现的功能如下&#xff1a; 配置过程也相对简单&#xff1a; 第一步&#xff1a; 编辑如下文件&#xff1a; 第二步…

git介绍和安装、(git,github,gitlab,gitee介绍)、git工作流程、git常用命令、git忽略文件

1 git介绍和安装 2 git&#xff0c;github&#xff0c;gitlab&#xff0c;gitee介绍 3 git工作流程 4 git常用命令 5 git忽略文件 1 git介绍和安装 首页功能写完了---》正常应该提交到版本仓库---》大家都能看到这个---》 运维应该把现在这个项目部署到测试环境中---》测试…

最新抖音去水印PHP源码 非第三方接口

简介&#xff1a; 最新抖音去水印PHP源码 非第三方接口 源码全开源 视频解析接口来自官方抖音视频接口!非第三方接口!上传PHP环境中即可运行!支持上传二级目录访问! 访问你的域名地址/douyin.php douyin.php(此文件可以自行重新命名) 支持带有文本的链接和视频ID或者分享的…

【ppt技巧】批量修改ppt中的字体

PPT文件中的字体想要全部更换&#xff0c;有什么方便的方法吗&#xff1f;今天分享两个方法&#xff0c;一键修改ppt文件字体。 方法一&#xff1a; 找到功能栏中的编辑选项卡&#xff0c;点击替换 – 替换字体&#xff0c;在里面选择我们想要替换的字体就可以了。 方法二&am…

springboot项目集成kafka,并创建kafka生成消息线程池

效果图: 步骤1:添加依赖 <!-- kafka依赖 --><dependency><groupId>org.apache.kafka</groupId><<

10、SpringBoot_测试用例

四、测试用例 1.准备工作 添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><dependency><groupId>com…

医药行业投资公司都有哪些?医药企业项目投资分析实用工具

据药融云-投融资数据库信息调研结果发现&#xff0c;在 3000家参与医疗投资的资方中,有超200家专注医疗投资的机构。 资方的信息可以通过垂直的生物医药行业投融资数据库进行查找&#xff0c;该类数据库收载了全球绝大部分的生物医药行业投资机构信息&#xff08;包含了投资机构…

SonarQube学习笔记三:直接使用sonar-scanner扫描器

目录 1.安装Sanner扫描器2.环境变量配置3.创建项目3.1 登录并创建项目3.2 输入项目名称信息3.3 选择分析仓库类型3.4 创建令牌3.5 保存令牌&#xff08;非必须&#xff09;3.6 选择构建技术方案3.6.1 .Net类项目3.6.2 Java类项目 3.7 获取Sonar检查结果3.8 在页面查看检查结果或…

微积分 - 对数函数与指数函数的导数

指数法则 对数法则 换底法则&#xff1a;对于任意的底数b>1和c>1以及任意的数x>0有&#xff1a; 对数函数和指数函数求导 令,那么g的导数是什么&#xff1f;使用导数的定义我们得到&#xff1a; 我们如何来简化这个杂乱的公式呢&#xff1f;当然是使用对数法则了&a…

nodejs+vue 高校社团综合服务系统elementui

在当今高度发达的信息中&#xff0c;信息管理改革已成为一种更加广泛和全面的趋势。为确保中国经济的持续发展&#xff0c; 第三章 系统分析 5 3.1 系统设计目标 6 3.2 系统可行性分析 6 3.3 系统功能分析和描述 7 3.4系统UML用例分析 8 3.4.1管理员用例 9 3.4.2用户用例 9 3.5…