例如:

3 1 2 4

4 3 6

7 9

16

现在如果知道N和最后得到的数字sum,请求出最初序列a[i],为1~N的一个排列。若有多种答案,则输出字典序最小的那一个。数据保证有解。

输入格式

第1行为两个正整数n,sum

输出格式

一个1~N的一个排列

样例输入

4 16

样例输出

3 1 2 4

数据规模和约定

0

感觉这题目不够规范呀:n和N都出现了,应该统一字母的;也用了sum作为变量声明,在python中sum是一个函数,应避免使用函数名作为变量名,也没有给出最后数字s的取值范围…除此以外还要区分开题目中“一个1~N的排列”,“1~N的一个排列”,“一个1~N的一个排列”的意思,因为理解错题目,我还特地在问答区求助了,呜呜呜,说多都是泪…

分析

=================================================================

我们看一下题目,他大致的意思就是给一个数字n,通过1 ~ n的各种排列(假设n是5,那么就是1,2,3,4,5的各种排列)不断两两相加最终得到一个数,如果这个数与总和值相等,那么就返回这个排列,存在多个序列时返回字典序最小的序列。([2,1,3],[1,3,2],[3,1,2]中字典序最小的序列是[1,3,2])。

最容易想到的做法是按字典序由低到高不断穷举每一个序列,让每一个序列不断两两求和相加,最终得到一个数,让这个数与目标值比较看是否相等,若相等,则直接返回该序列,否则继续让下一个序列相加计算,直到遇到符合条件的序列为止。这种方法可以拿到70分,不想在这题浪费太多时间的同学,这么做足够了。

穷举每一个序列,一般就是使用DFS来寻找的。就我而言,我尝试过很多方法去优化上面的算法均已失败告终,(AC拿的真不容易啊!!)即使在遍历搜索过程中添加了如当序列两两相加的值大于目标值时,提前终止递归的条件,还是只能拿个70分。说明这条题还是得找出规律才能更深层次的优化此算法。

这道题跟杨辉三角有异曲同工之妙,都是一个数的值等于它左右肩膀值之和,如果看这道题例子的同时,结合杨辉三角一起看,各位就能找出其中的规律了。

字看不清没关系,图看的清吧?看得清我就要说了。咳咳,ab图中的每一行对应元素相乘之和相等。 这条件相当good,有了它,不会再有中间商赚差价,直接一步到位。

思路

=================================================================

得知本题与杨辉三角有密不可分的关系后,我们就能通过杨辉三角来优化搜索算法了。

因为我们穷举是穷举最后一行序列,也就有n个元素,所以我们也要获取杨辉三角第n行的所有元素。因为n值不大,我们就可以直接通过一个数的值等于它肩膀两个数的值之和这个关系,不断一行一行的推出第n行的所有元素。

接着让每个长度为n的序列与该行对应元素相乘求和并与目标值比较,若相等,则打印序列并终止递归,否则继续搜索。到这里,经过优化后的算法效率显著提高了,将该思路的算法提交能拿90分,已经非常不错了。

还差10分,这10分差就差在没有剪枝。我们穷举序列不应该让长度为n的序列和杨辉三角相乘求和的结果与目标值s比较。而是应该在它生成的过程中就要与目标值s相比了,如果生成过程中的长度小于n的序列与杨辉三角相乘求和都已经大于目标值,那么完整序列必定大于目标值,可以提前终止递归。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)

文末有福利领取哦~

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、Python必备开发工具

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)

五、Python练习题

检查学习结果。

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

n全套学习资料已经上传

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长! [外链图片转存中…(img-NjkQPLGN-1712573086191)]

推荐链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。