代码随想录算法训练营第51期第28天 | 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II、1005.K次取反后最大化的数组和

devtools/2024/12/26 13:11:10/

122. 买卖股票的最佳时机 II

122. 买卖股票的最佳时机 IIicon-default.png?t=O83Ahttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/1.我刚刚看了一下之前用C++写题的时候,自己说了句【我好像记得这道题是怎么写的,也不知道是福是祸】会心一笑,好像不是坏事,过了这么久了,我还是记得,说明我会呀

2.很简单哈,就是搜集区间为正数的每日收入,加起来就行了,有一说一,这个是不是画个坐标系,然后统计每个上升区间的差值就可以了

int maxProfit(int* prices, int pricesSize) {int res = 0;for (int i = 1; i < pricesSize; i++) {// int money = *(prices + i) - *(prices + i - 1);int money = prices[i] - prices[i-1];if (money > 0) {res += money;}}return res;
}

55. 跳跃游戏

55. 跳跃游戏icon-default.png?t=O83Ahttps://leetcode.cn/problems/jump-game/1.有点尴尬,看之前的blog的时候,不小心看到范围两个字,好吧,我知道怎么写了

2.这题的关键在于覆盖范围,当覆盖范围达到数组长度的时候,就是返回true的时候了,一旦没有达到覆盖范围,则return false

3.我把卡哥的代码也放进来,我觉得更简洁一些

贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点

bool canJump(int* nums, int numsSize) {int range = *nums;int tmp = 0;for (int i = 1; i < numsSize; i++) {if (i <= range) {tmp = nums[i] + i;if (tmp > range) {range = tmp;if (range > numsSize -1){return true;}}}else{return false;}}return true;
}#define max(a, b) (((a) > (b)) ? (a) : (b))bool canJump(int* nums, int numsSize){int cover = 0;int i;// 只可能获取cover范围中的步数,所以i<=coverfor(i = 0; i <= cover; ++i) {// 更新cover为从i出发能到达的最大值/cover的值中较大值cover = max(i + nums[i], cover);// 若更新后cover可以到达最后的元素,返回trueif(cover >= numsSize - 1)return true;}return false;
}

45. 跳跃游戏 II

1.打眼一看,这道题应该用动态规划会更好做一点,但是tm的我现在记不得动态规划的写法了;

2.参考文心一言的写法,懂的很舒服

3.看了一言的写法,dp也可以,无非是没有贪心高效罢了

int jump(int* nums, int numsSize) {int jumps = 0;  // 跳跃次数int currentEnd = 0;  // 当前跳跃范围的结束位置int farthest = 0;  // 在当前跳跃范围内能够到达的最远点for (int i = 0; i < numsSize - 1; i++) {  // 遍历到倒数第二个元素farthest = (farthest > i + nums[i]) ? farthest : i + nums[i];  // 更新最远点if (i == currentEnd) {  // 到达当前跳跃范围的边界jumps++;  // 进行一次新的跳跃currentEnd = farthest;  // 更新跳跃范围的结束位置为当前能够到达的最远点if (currentEnd >= numsSize - 1) {  // 如果已经能够跳到最后一个元素或更远break;  // 提前终止循环}}}return jumps;
}

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

1.觉得这道题很简单,但是怎么想都没有想出来,就是在k还没遍历完,但是所有数都是正数了,怎么处理?

2.看了一下解说,两次贪心,两次排序,茅塞顿开 !!!第一次贪心:让绝对值大的负数变正数;第二次贪心:排序之后,找数值最小的正整数进行反转

int cmp(const void* a, const void* b) {int inta = *(int *)a;int intb = *(int *)b;return inta - intb;
}
int largestSumAfterKNegations(int* nums, int numsSize, int k) {qsort(nums, numsSize, sizeof(int), cmp);int res = 0;for (int i = 0; i < numsSize; i++) {if (nums[i] < 0 && k > 0){nums[i] = -nums[i];k--;}res += nums[i];}qsort(nums, numsSize, sizeof(int), cmp);if (k % 2 == 1) {res = res - nums[0] * 2;}return res;
}


http://www.ppmy.cn/devtools/145533.html

相关文章

修改采购订单BAPI学习研究-BAPI_PO_CHANGE

这里是修改采购订单BAPI&#xff0c;修改订单数量和交货日期的简单应用 文章目录 修改数量代码运行结果 修改交货日期代码运行结果 修改数量 代码 *&---------------------------------------------------------------------* *& Report Z_BAPI_PO_CHANGE *&----…

Halcon 的标定

*窗口坐标 宽度 dev_update_window(off)Halcon winw:=10000 winh:=10000 dev_open_window(0, 0, 1000, 1000, black, WindowHandle) dev_set_part(0,0,winw,winh) set_system (clip_region, false) dev_clear_window() dev_set_draw (margin) gen_region_line(xaxis, 0, 0, …

《战神:诸神黄昏》游戏运行时提示找不到gamede.dll文件怎么办?gamede.dll丢失的修复指南

在沉浸于《战神&#xff1a;诸神黄昏》的壮阔世界时&#xff0c;突然弹出的“找不到gamede.dll文件”错误提示可能会让玩家措手不及。作为一名经验丰富的软件开发从业者&#xff0c;我深知这类问题对游戏体验的影响。今天&#xff0c;我将为大家详细解析gamede.dll文件丢失的原…

Redis基础(1)--基本全局指令与架构

1. 基本全局命令 Redis有5种数据结构&#xff0c;但它们都是键值对中的值&#xff0c;对于键来说有⼀些通用的命令。 1.1KEYS 返回所有满足样式&#xff08;pattern&#xff09;的key。支持如下统配样式。 h?llo 匹配 hello , hallo 和hxlloh*llo 匹配 hllo 和 heeeelloh[…

Java操作Xml

一、数据准备 1、文件头实体类 package com.xiaobai.xmlpractice;import lombok.AllArgsConstructor; import lombok.Data;/*** Author 王天文* Date 2024/12/18 21:46* Description: xml头*/ AllArgsConstructor Data public class Head {private String desc;private Strin…

whisper.cpp: Android端测试 -- Android端手机部署音频大模型

whisper.cpp: Android端测试 1.环境需要2.构建项目3.Android测试 1.环境需要 以下是经实验验证可行的环境参考&#xff0c;也可尝试其他版本。 &#xff08;1&#xff09;PC&#xff1a;Ubuntu 22.04.4 &#xff08;2&#xff09;硬件设备&#xff1a;Android 手机 &#x…

肿瘤电场治疗费用

肿瘤电场治疗作为一种前沿的肿瘤治疗方法&#xff0c;近年来备受关注。该方法通过利用特定频率的交流电场&#xff0c;作用于恶性肿瘤细胞&#xff0c;以达到抑制肿瘤生长的目的。然而&#xff0c;随着这种治疗方法的普及&#xff0c;其费用问题也逐渐成为患者和家属关注的焦点…

低代码开发中 DDD 领域驱动的页面权限控制

在低代码开发的领域中&#xff0c;应用安全与灵活性是两大关键考量因素。领域驱动设计&#xff08;DDD&#xff09;作为一种在软件设计领域广泛应用且颇具影响力的方法论&#xff0c;正逐渐在低代码开发的页面权限控制方面展现出其独特的价值与潜力。本文旨在客观地探讨如何借助…