LeetCode_从数量最多的堆取走礼物[2558]

题目:

示例:

解析:

先说说我自己的解法。看到题目描述我就觉得要用递归,我们可以先来一个if语句界定终止递归的条件,就是k==0的时候。我们把这时候gifts指针指向的数组求和并返回。

之后就是想办法解决开平方根,和在哪个数上开平方根。我们可以用一个函数sqrt来实现,在VS中包含math.h头文件就可以使用此函数了。之后我们要得出数组中最大值的下标,定义一个max=0,用for循环遍历数组,如果数组里面的数大于max,将这个数赋给max、并且记录下标。for循环完成后我们就可以得到最大数的下标了。将其开平方并返回pickGifts(gifts, giftsSize, --k);就行了。

cpp 复制代码
long long pickGifts(int* gifts, int giftsSize, int k)
{
	if (k == 0)
	{
		long long sum = 0;
		for (int i = 0; i < giftsSize; i++)
		{
			sum += *(gifts + i);
		}
		return sum;
	}
	else
	{
		long long pos;
		long long max = 0;
		for (int i = 0; i < giftsSize; i++)
		{
			if (*(gifts + i) > max)
			{
				max = *(gifts + i);
				pos = i;
			}
		}
		*(gifts + pos) = (long long)sqrt(*(gifts + pos));
		return pickGifts(gifts, giftsSize, --k);
	}
}

官方解法是用的堆,这里我还没学到,等我学到后面再来更新把。

本期博客到这里就结束了,如果有什么错误,欢迎指出,如果对你有帮助,请点个赞,谢谢!

相关推荐
麒qiqi4 分钟前
【Linux 进程间通信】信号通信与共享内存核心解析
java·linux·算法
肆悟先生14 分钟前
3.15 引用类型
c++·算法
暗之星瞳20 分钟前
随机森林(初步学习)
算法·随机森林·机器学习
不爱吃糖的程序媛21 分钟前
基于Ascend C开发的Vector算子模板库-ATVOSS 技术深度解读
人工智能·算法·机器学习
松涛和鸣22 分钟前
35、Linux IPC进阶:信号与System V共享内存
linux·运维·服务器·数据库·算法·list
Cx330❀27 分钟前
《C++ 动态规划》第001-002题:第N个泰波拉契数,三步问题
开发语言·c++·算法·动态规划
LYFlied28 分钟前
【每日算法】LeetCode 114. 二叉树展开为链表:从树结构到线性结构的优雅转换
数据结构·算法·leetcode·链表·面试·职场和发展
毕设源码-钟学长33 分钟前
【开题答辩全过程】以 基于Spark机器学习算法的体育新闻智能分类系统设计与实现为例,包含答辩的问题和答案
算法·机器学习·spark
天勤量化大唯粉35 分钟前
基于距离的配对交易策略:捕捉价差异常偏离的均值回归机会(天勤量化代码实现)
android·开发语言·python·算法·kotlin·开源软件·策略模式
智航GIS36 分钟前
ArcGIS大师之路500技---036通俗易懂讲解克里金法
人工智能·算法·arcgis