cf.737.B题

题意自查(主要是英文): 意思大概是输入n组测试数据,每组测试数据分别要输入元素个数和组数k,就是需要将数组内所有元素分割成k组,组内的元素顺序不能发生改变,分完组后的所有组合如果能完成排序,必须以组的形势排序,结果每个元素都具有单调性,则输出“Yes",否则输出”No“.

测试数据1:
5 4
6 3 4 2 1
五个数,组数k为4,需要将五个数分为4组,可以分成6,3 4,2,1,这四组,可以发现最终排序为1,2,3 4,6.结果合法,输出Yes。从这个样例中可以发现一个思路,就是如果数据中存在连续递增的输入数据,例如3 4 5 6这样的数据,可以将他们分为一组,再将其他数据分组。

测试数据2:
4 2
1 -4 0 -2
分析可得,可以分成1 -4,0 -2,或者0 -2,1 -4,这两种结果,可以发现数据元素顺序不能发生改变,结果为无论怎样都无法成为合法排序。

我的思路:首先问题核心在于判断分组后的数据是否为合法单调性,可以先判断数据中是否存在连续递增加1的数据,首先处理为一组,但是如何分组我不会写。然后呢,如何判断分组后的数据是否能合法排序,没有思路。

先来一手代码:
在这里插入图片描述
这是本道题目的核心代码,整体思路:首先写一个pair,first用来存储数据,second用来存储当前数据的位置(从0开始),然后将数据整体sort排序,这时候排好序的数据位置是打乱的,紧接着,解题的关键就在于如何判断排好序的数据是合法排序,贪心题的关键就在于发现某种性质,在本题目中,在排好序的pair组中,如果当前数据的前一个数据的second加上1后不等于当前数据的second,意思也就是在原始数据中,这两个数据不能进行合法排序,代码就是for循环中的if判断语句,没比较一组数据,如果不合法,那组数k就递减,当所有数据都比较完后,如果k>0证明答案为合法排序,否则输出No。

个人心得:
我是个刚入门的菜鸟,对于贪心的学习,属实没有听懂,以至于我都判断不出来这是到贪心题,当时做题的思路就是如何进行分组,而分组不会的我,也就没有了后续,后来的题解是查看他人代码,只是搞懂了代码的含义,至于贪心的某种性质,我还是不能理解是如何判断出来的,还希望各位大佬能看到本片文章后给予一些指导,万分感谢,感谢阅读。本人也非常希望能有朋友伙伴一起学习算法,互相交流,共同进步,谢谢!

想要共同交流的伙伴这里看:QQ1514101126

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值