代码随想录训练营25day-贪心算法3

embedded/2024/9/25 19:15:17/

一、1005 k次取反后最大化数组

主要是用贪心的思维解决问题,达到训练的目的。题目中说明了必须要用k次,数组也有负数或者正数,怎么让数组最大化呢?

1 k次范围内,把所有的负数全部翻转,这样能够最大化;

2 如果还剩下次数k-n(n是负数的个数),那么怎么最大化呢?一开始思考时候,把最小的数字依次翻转,代价最小,但是这个思路是错误的,找到现在数组最小的元素,来回翻转(题目说同一个元素可以来回翻转),损失最多就是减少该值,这样代价才最小。

3 综合上面两个情况,这样能全局最优,获取最大的值。

void sortArr(int* nums, int numsSize)
{for(int i = 0; i < numsSize; i++){for(int j = i + 1; j < numsSize;j++){if(nums[i] > nums[j]){int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}}}
}
int largestSumAfterKNegations(int* nums, int numsSize, int k) {int sum = 0;int pos = 0;if(numsSize <= 0){return 0;}sortArr(nums, numsSize);for(int i = 0; i < numsSize; i++){if(k > 0 && nums[i] <= 0){nums[i] *= -1;k--;//pos++;}}printf("k = %d\n", k);sortArr(nums, numsSize);if(k % 2 == 1)//--为+  -+为-{nums[pos] *= -1;//奇数次翻转为该数取反}for(int i = 0; i < numsSize; i++){printf("%d-num = %d\n", i, nums[i]);sum += nums[i];}return sum;
}

二、134 加油站

方法一 暴力解法(会超时)

主要是遍历cost数组,从i=0开始,如果油量有剩余,且能回到原点,那么存在这样一个位置,可以满足条件。

int canCompleteCircuit(int* gas, int gasSize, int* cost, int costSize) {//暴力法int index = 0;for(int i = 0; i < costSize; i++){int rest = gas[i] - cost[i];index = (i + 1) % costSize;//循环一圈while(rest > 0 && index != i){rest  += gas[index] - cost[index];index = (index + 1) % costSize;}if(rest >= 0 && index == i){return i;}}return -1;
}

 方法二 算法>贪心算法

 从index  = 0开始计算油量差,累加到cursums,如果小于0,无论怎样,走到i位置都会断油,从下一个位置接着重新计算。

int canCompleteCircuit(int* gas, int gasSize, int* cost, int costSize) {int pos = 0;int cursums = 0;int total = 0;for(int i = 0; i < gasSize; i++){int reset = gas[i] - cost[i];cursums += reset;total  += reset;if(cursums < 0){pos  = i + 1;cursums = 0;}}if(total < 0) return  -1; //总的剩余油量为负数,没有能走完一圈的点return  pos;
}

三、135 分发糖果

 1 初始化数组(size是ratingsize),用来保存糖果个数;

 2 需要考虑左和右两边,可以拆开来看:

     先看左边,从左往右遍历,如果当前位置的孩子分数大于左边,那么在左边糖果基础上+1;

    然后看右边,如果当前位置的孩子大于右边孩子,这里需要考虑左边情况,需要找到右边糖果加1(nums [i +1] + 1)和nums[i]的最大值,这样才能满足左右两边情况。

  3 最后结果全部相加。


int candy(int* ratings, int ratingsSize) {int result = 0;int* nums = (int*)calloc(ratingsSize, sizeof(int));//初始化为1,至少1个for(int i = 0; i < ratingsSize; i++){nums[i] = 1;}for(int i = 1; i < ratingsSize; i++){//左边和右边比较if(ratings[i] > ratings[i - 1]){nums[i] = nums[i - 1] + 1; }}for(int i = ratingsSize - 2; i >= 0; i--){if(ratings[i] > ratings[i + 1]){nums[i] = nums[i] > nums[i + 1] + 1? nums[i]: nums[i + 1] + 1;}}for(int i = 0; i < ratingsSize; i++){result += nums[i];}return result;
}


http://www.ppmy.cn/embedded/21343.html

相关文章

【MySQL】函数

1. 函数简介 SQL 语言中&#xff0c;包括了内置函数和自定义函数。内置函数是系统内置的通用函数&#xff0c;而自定义函数是我们根据自己的需要编写的。MySQL提供的内置函数实现的功能角度可以分为 数值函数、字符串函数、日期和时间函数、流程控制函数、加密与解密函数、获取…

使用 xe2 调整 3dTileset 模型位置并获取模型矩阵 modelMatrix

使用 xe2 调整 3dTileset 模型位置并获取模型矩阵 modelMatrix Demo 获取改变后的模型的 modelMatrix src\examples\tile\edit\offset\index.html 目录下&#xff0c;设置 3dTileset 地址&#xff0c;拖动模型&#xff0c;监听 modelMatrix 变化。

milvus datacoord启动源码分析

datacoord启动源码分析 结构体 // components.DataCoord // DataCoord implements grpc server of DataCoord server type DataCoord struct {ctx context.Contextsvr *grpcdatacoordclient.Server }// grpcdatacoord.Server // Server is the grpc server of datacoord type…

ubuntu安装源问题

一、 清华大学开源软件镜像站 https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ 二、 python镜像源 1、临时配置 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simplepip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U --trusted…

js 下载音频的实现方式

通常下载文件我们会用到 <a> 标签&#xff0c;但是 a 标签在下载音频的时候会跳转到一个新页面进行播放&#xff0c;不会直接下载&#xff0c;这与我们的需求南辕北辙。这里我通过查询资料&#xff0c;找到了两种方式&#xff08;原理想通&#xff0c;也可以理解为一种&a…

智能手机加速度计和陀螺仪进行心律不齐以及心衰的检测

期刊地址&#xff0c;希望那位大佬根据这个期刊进行创业 &#xff0c;拿到NMPA证书&#xff0c;造福中国人&#xff01;太简便了这个方案。https://www.jacc.org/doi/full/10.1016/j.jchf.2024.01.022https://www.jacc.org/doi/full/10.1016/j.jchf.2024.01.022 背景与目的&…

IP地址的地理位置如何确定?

IP地址的地理位置确定是一个复杂且多步骤的过程&#xff0c;它依赖于多种技术和数据源来实现。下面将详细解释IP地址地理位置是如何被确定的。 首先&#xff0c;我们需要了解IP地址的基本结构。IP地址由一串数字组成&#xff0c;用于标识网络中的设备。这些数字实际上代表了设…

VisualGLM部署微调docker环境

一开始直接在本地环境部署,发现cuda版本冲突,所以改用docker,docke部署既不影响显卡性能,又可以避免环境冲突 1.创建docker容器 1.1. 拉取带有cuda11.7cudnn8的镜像 docker pull andersen9419/cuda11.7.1_cudnn8_ubu22_torch2.01.2.运行容器 docker run --gpus all --netho…