代码随想录训练营26day-贪心算法4

一、860 柠檬水找零

题目解析:注意一开始是没有零钱,也只会取5 10 20三类数字,因此从这3类数字出发,去判断。

1 如果是5元,那么直接收,five++;

2 如果是10元,那么需要five--,ten++,但是如果five本身就小于0,那么不可能找零成功,返回false;

3 如果是20元,这里需要看有多少种零钱找零方式:1)10元+5元组合; 2)5+5+5组合;首先需要消耗10元,因为5元可以兑换零钱方式更多,先把兑换方式少的减掉。

bool lemonadeChange(int* bills, int billsSize) {int five = 0, ten = 0, twenty = 0;for(int i = 0; i < billsSize; i++){if(bills[i] == 5){five++;}else if(bills[i] == 10){ten++;if(five > 0){five--;}else{//five没有 无法找零return false;}}else{if(ten > 0 && five > 0){ten--;five--;}else if(five >= 3){five -=3;}else{return false;}}}return true;
}

二、406 根据身高重建队列

题目要求重建队列,保证身高和前面的人数两个方面,需要从两个方面去拆分排序。

1 先考虑身高,从高到低,如果身高相同,那么k(人数)少的排前面。

2 排序k(人数)因为身高已经排序成功,所以需要考虑的是k值,把k插入对应的位置,这样people身高是排序的,只需要考虑k的位置,就满足了两个条件。

/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/
void insert(int**arr, int size, int pos, int* val)
{int** tmp = (int**)malloc(sizeof(int*) * size);int index = 0;for(int i = pos; i < size; i++){tmp[index] = malloc(sizeof(int) * 2);tmp[index][0] = arr[i][0];tmp[index][1] = arr[i][1];index++;}//改值arr[pos][0] = val[0];arr[pos][1] = val[1];index = 0;for(int i = pos + 1; i < size; i++){arr[i][0] = tmp[index][0];arr[i][1] = tmp[index][1];index++;}// for(int i = 0; i < size; i++)// {//     printf("val = %d %d\n", arr[i][0], arr[i][1]);// }
}
void swap(int* a, int* b)
{int tmp_1 = a[0];int tmp_2 = a[1];a[0] = b[0];a[1] = b[1];b[0] = tmp_1;b[1] = tmp_2;
}
int** reconstructQueue(int** people, int peopleSize, int* peopleColSize, int* returnSize, int** returnColumnSizes) {*returnSize = peopleSize;*returnColumnSizes = (int*)malloc(peopleSize * sizeof(int));//先排列身高for(int i = 0; i < peopleSize - 1; i++){for(int j = i + 1; j < peopleSize; j++){if(people[j][0] == people[i][0]){if(people[j][1] < people[i][1]){// int tmp_1 = people[j][0];// int tmp_2 = people[j][1];// people[j][0] = people[i][0];// people[j][1] = people[i][1];// people[i][0] = tmp_1;// people[i][1] = tmp_2;swap(people[j], people[i]);}}else if(people[j][0] > people[i][0]){// int tmp_1 = people[j][0];// int tmp_2 = people[j][1];// people[j][0] = people[i][0];// people[j][1] = people[i][1];// people[i][0] = tmp_1;// people[i][1] = tmp_2;swap(people[j], people[i]);}}}//再查看 k值int** queue = (int**)malloc(sizeof(int*) * peopleSize);for(int i = 0; i < peopleSize; i++){queue[i] = (int*)malloc(sizeof(int) * 2);queue[i][0] = people[i][0];queue[i][1] = people[i][1];}for(int i = 0; i < peopleSize; i++){(*returnColumnSizes)[i] = 2;//printf("%d -> pepeple %d %d\n", i, people[i][0], people[i][1]);insert(queue, peopleSize, people[i][1], people[i]);}return queue;
}

三、452. 用最少数量的箭引爆气球

题目分析:用最少的箭引爆气球,主要是考虑重叠情况,如果重叠区间越多,那么使用的箭数量越少,利用排序 + 贪心算法:

void swap(int* a, int* b)
{int tmp_1 = a[0];int tmp_2 = a[1];a[0] = b[0];a[1] = b[1];b[0] = tmp_1;b[1] = tmp_2;
}int findMinArrowShots(int** points, int pointsSize, int* pointsColSize){*pointsColSize = 2;if(pointsSize == 0){return 0;}int result = 1;//按照左边界排序for(int i = 0; i < pointsSize - 1; i++){for(int j = i + 1; j < pointsSize; j++){if(points[j][0] < points[i][0]){swap(points[i], points[j]);}} }for(int i = 1; i < pointsSize; i++){if(points[i][0] > points[i -1][1]){result++;}else{points[i][1] = points[i][1] < points[i -1][1]? points[i][1] : points[i - 1][1];//最小右边界}}return result;
}

上面的code在LeetCode上面会超时,分析了下,应该是排序算法导致的,因此参考快排的算法:

void swap(int* a, int* b)
{int tmp_1 = a[0];int tmp_2 = a[1];a[0] = b[0];a[1] = b[1];b[0] = tmp_1;b[1] = tmp_2;
}
int Partition(int **points, int low, int high){     // 从小到大排序int base = points[low][0];int index = points[low][1];int left,right;while(low < high){while(low < high && points[high][0] >= base){high--;}left = points[low][0];right = points[low][1];points[low][0] = points[high][0];points[low][1] = points[high][1];points[high][0] = left;points[high][1] = right;        while(low < high && points[low][0] <= base){low++;}left = points[low][0];right = points[low][1];points[low][0] = points[high][0];points[low][1] = points[high][1];points[high][0] = left;points[high][1] = right;}return low;
}
void QuickSort(int **points, int low, int high){if(low < high){int base = Partition(points,low,high);QuickSort(points,low,base - 1);QuickSort(points, base + 1, high);}
}int findMinArrowShots(int** points, int pointsSize, int* pointsColSize){*pointsColSize = 2;if(pointsSize == 0){return 0;}int result = 1;//按照左边界排序// for(int i = 0; i < pointsSize - 1; i++)// {//     for(int j = i + 1; j < pointsSize; j++)//     {//         if(points[j][0] < points[i][0])//         {//            swap(points[i], points[j]);//         }//     } // }QuickSort(points, 0 , pointsSize - 1);//左闭右闭区间for(int i = 1; i < pointsSize; i++){if(points[i][0] > points[i -1][1])//如果当前的左边超过了上一个的右边边界,不重叠{result++;}else//找到重叠区间最小右边界{points[i][1] = points[i][1] < points[i -1][1]? points[i][1] : points[i - 1][1];//最小右边界}}return result;
}

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

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

相关文章

黄金行情下跌有投资机会吗?

尽管黄金价格的波动常常引起投资者的高度关注&#xff0c;但行情的下跌未必只是警讯&#xff0c;亦可能蕴藏着某些难得的投资机会。总之&#xff0c;答案是肯定的——在黄金行情下跌时&#xff0c;依旧有适宜的投资机会&#xff0c;只是这需要投资者具备相应的应对知识和策略。…

微信小程序实现蓝牙连接通讯

由于最近的项目在做小程序蓝牙通讯这块的内容&#xff0c;所以将实现的过程在这简单的记录下。 1、首先要初始化蓝牙-检查蓝牙适配器是否打开 async initBluetooth(): Promise<void> {return new Promise((resolve: any, reject: any) > {const _this thisif (Bluet…

美森快船和以星快船有什么区别?美线海运都有哪些快船?

在繁忙的国际海运市场中&#xff0c;快船服务以其高效、快捷的特点受到广大货主的青睐。其中&#xff0c;美森快船和以星快船作为知名的海运服务提供商&#xff0c;凭借着卓越的服务品质&#xff0c;在航运界树立了良好的口碑。那么&#xff0c;美森快船和以星快船究竟有何不同…

利用ollama和open-webui本地部署通义千问Qwen1.5-7B-Chat模型

目录 1 安装ollama 2 安装open-webui 2.1 镜像下载 3 配置ollama的模型转换工具环境 3.1 下载ollama源码 3.2 下载ollama子模块 3.3 创建ollama虚拟环境 3.4 安装依赖 3.5 编译量化工具 7 创建ollama模型 8 运行模型 参考文献&#xff1a; 1 安装ollama curl -fsSL …

【CCF推荐-C类】计算机学术会议截稿信息2条

中国计算机学会推荐国际学术会议和期刊目录自2010年8月首次发布以来&#xff0c;已历经五版&#xff0c;得到了计算机领域科研工作者的广泛关注。 目录共包含十个领域&#xff0c;分为ABC三类&#xff1a;A类是国际上极少数顶会与顶刊&#xff1b;B类代表领域内高水平的会议与…

2-2 任务:闰年判断

本次课&#xff0c;我们讨论了闰年的判断方法、关系运算符与关系表达式、逻辑运算符与逻辑表达式&#xff0c;以及流程控制结构中的选择结构。 闰年判断 闰年是为了使日历年与地球绕太阳公转的时间保持一致而设定的&#xff0c;具有366天。闰年的判断规则如下&#xff1a; 普…

16V/2A高集成功率MOS同步降压转换器SOT23-6封装

概述&#xff1a; PCD8020 是一款内部集成两个功率 MOS 的高效率 2A 同步整流降压转换器。 该器件提供PWM 与 PFM 两种控制模式&#xff0c; 能够在很宽的负载范围内实现高效率。PCD8020 采用小巧的 SOT23-6 封装&#xff0c; 外围器件少&#xff0c; 从而实现小尺寸的系统电源…

【算法】约瑟夫环

文章目录 题目一1.数组模拟1.1出圈顺序递归求出圈顺序 1.2最后出圈人 2.环形链表【DEMO】3.递推求最后出圈人3.13.2 题目二1.数组模拟2.递推求最后出圈人2.12.2 题目一 1-n编号 s开始1-m报数 报到m出圈 求出圈顺序or最后人 1.数组模拟 1.1出圈顺序 递归求出圈顺序 // AC输入…

python 如何判断两个字典是否相等

Python 字典的 cmp() 函数用于比较两个字典元素。 语法 cmp()方法语法&#xff1a; cmp(dict1, dict2)参数 dict1 -- 比较的字典。 dict2 -- 比较的字典。 返回值 如果两个字典的元素相同返回0&#xff0c;如果字典dict1大于字典dict2返回1&#xff0c;如果字典dict1小于…

为AI电脑生态注入强悍动力,安耐美PlatiGemini 1200W高性能电源

在DIY攒机的过程中&#xff0c;电源是非常重要的一环&#xff0c;现在高性能的硬件功耗往往很高&#xff0c;因此一款优秀的电源整个系统稳定运行的基石。最近&#xff0c;我发现一款由安耐美&#xff08;Enermax&#xff09;推出的PlatiGemini 1200W电源&#xff0c;它不仅满足…

ShardingSphere-JDBC快速入门

ShardingSphere-JDBC读写分离快速入门 一、ShardingSphere-JDBC 读写分离1.创建springboot程序1.1 添加依赖1.2 java代码1.3 配置 2.测试 二、ShardingSphere-JDBC垂直分片1.创建springboot程序1.1 导入依赖1.2 java代码1.3 配置 2.测试 三、ShardingSphere-JDBC水平分片1.创建…

代码随想录算法Day34(2)||LeetCode134.加油站

学习内容参考卡哥代码随想录,有文字学习资料(代码随想录网站)和视频讲解(b站) 2.134加油站 题目 力扣题目链接(opens new window) 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需…

flutter笔记-万物皆是widget

文章目录 helloFlluter自定义Widget优化 这篇文章后就不见写了&#xff0c;学flutter主要是为了更好的使用 flutter-webrtc&#xff0c;所以到这里基本就了解了大部分的知识&#xff0c;后续边用边查&#xff1b; 在flutter中所有的view都叫widget&#xff0c;类似文本组件Tex…

Vue3页面的执行过程

在 Vue 3 中&#xff0c;一个普通的页面的执行过程可以分为以下几个环节&#xff1a; 创建 Vue 应用程序实例&#xff08;createApp&#xff09;&#xff1a; 使用 createApp 函数创建一个 Vue 根实例。配置根实例--该函数接收一个配置对象作为参数&#xff0c;其中的配置项可包…

DICOM图像像素值的位数分类、DICOM图像内存申请如何计算?

DICOM图像像素值的位数分类 用于表示像素值的位数会根据图像类型有所不同&#xff1a; 灰度图像&#xff1a; 灰度图像&#xff08;如CT、MR等医学影像&#xff09;&#xff0c;每个像素通常只包含一个灰度值&#xff0c;用来表示该位置的组织密度或信号强度。 根据您提供的…

对象与JSON字符串互转

1、JSON字符串转化成JSON对象 JSONObject jsonobject JSON.parseObject(str); 或者 JSONObject jsonobject JSONObject.parseObject(str); 功能上是一样的&#xff0c;都是将JSON字符串&#xff08;str&#xff09;转换成JSON对象 jsonobject 。注意str一定得是以键值对存在…

C语言进阶 数据的存储(上)

一、 数据类型详细介绍 我们前面已经学习了基本的内置类型 char 字符数据类型 short 短整型 int 整型 long 长整型 long long 更长的整型 float 单精度浮点型 double 双精度浮点形 类型有什么意义呢&#xff1f; 1 使用这个类型开辟内存空间的大小 比如说 int 4个字节 short 两…

Python | Leetcode Python题解之第41题缺失的第一个正数

题目&#xff1a; 题解&#xff1a; class Solution:def firstMissingPositive(self, nums: List[int]) -> int:n len(nums)for i in range(n):while 1 < nums[i] < n and nums[nums[i] - 1] ! nums[i]:nums[nums[i] - 1], nums[i] nums[i], nums[nums[i] - 1]for …

算法刷题day46

目录 引言一、树的重心二、毕业旅行问题三、高精度乘法 引言 今天复习了一下高精度的所有模板&#xff0c;包括加法、减法、乘法、除法&#xff0c;因为自己当时在蓝桥杯的时候没有看出来那个题使用高精度&#xff0c;因为对于一个数的大小和一个数的长度&#xff0c;自己有时…

通过Bedrock Access Gateway解决方案快速访问Amazon Bedrock的多种大语言模型

Bedrock Access Gateway&#xff08;BAG&#xff09;解决方案提供了开箱即用、兼容 OpenAI 的代理功能&#xff0c;帮助用户轻松无缝地从 OpenAI 迁移到 Amazon Bedrock。 1. 概述 亚马逊云科技的 Amazon Bedrock 服务支持一系列领先的基础模型&#xff0c;为客户提供多种选择…