leetcode--561--Array Partition I(我的解法)

原题目:

该题目本质上是先进行升序排序,排序之后从小到大每相邻的两个形成一对,从而sum即为2n个数中的所有奇数位的数之和。具体的证明leetcode上已经有大神证明这种方法会使得目标函数达到最优。

我的解法:


这个解法我经过自己测试是正确的,但是在leetcode上提交之后是错误的,显示time limit exceeded,查了一下,出现这个错误的原因主要有两种,一个是出现死循环,一个是算法复杂度过高。我的问题应该是我用了最简单的排序算法,因此导致算法复杂度过高,所以还是调用c++封装后的库函数sort函数吧:(以后记住,最简单的升序排序方法就用sort函数吧)


sort函数用法总结:

template <class RandomAccessIterator>//模板1

 void sort ( RandomAccessIterator first, RandomAccessIterator last );
 
template <class RandomAccessIterator, class Compare>//模板2
 void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
使用模板1是对[first,last)进行升序排序,默认操作符为"<"。

模板2中使用comp函数进行排序控制,comp包含两个在[first,last)中对应的值,如果使用"<"则为升序排序,如果使用">"则为降序排序

sort是STL中提供的函数,头文件为#include<algorithm>以及using namespace std

下面是一个数组实例:

int a[5]={4,1,2,6,8};
sort(a,a+5);

我的解法中,为vector型数组,因此使用的是begin函数和end函数。begin返回的是容器的第一个元素,end返回的是最后一个元素的下一个,也就不是容器中的元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值