题目描述:
为了装修新房,你需要加工一些长度为正整数的棒材 sticks。
如果要将长度分别为 X 和 Y 的两根棒材连接在一起,你需要支付 X + Y 的费用。 由于施工需要,你必须将所有棒材连接成一根。
返回你把所有棒材 sticks 连成一根所需要的最低费用。注意你可以任意选择棒材连接的顺序。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-cost-to-connect-sticks
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
反思:
注意点一:一定要确保所有逻辑和处理时正确的,有一个地方没注意到,导致浪费很多点去定位,一定一定要注意主要逻辑一定要清晰,逻辑处理一定要正确。
注意点二:这里有个用例没考虑到就是只有一个元素,其余特殊用例倒是没有了。
解题思路:肯定是最小的开始连最后总和越少,因为每次拼接其实就是一个重复加的过程,把小的重复加总比大的划算。
另外就是怎么把最小的加起来:第一个想法就是排序,使用qsort函数,但是把最小的加完后,数组的个数会发生变化,那怎么办呢。因此就使用一个队列,为何使用队列,因为最先加起来的数肯定最小。因此先入队列的就最先加,把队列头和数组要加的数比较,谁小加谁。把加好的数入队列。
int Incom(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int connectSticks(int