早教吧 育儿知识 作业答案 考试题库 百科 知识分享

如何在O(n)时间内,对0到n的平方减一的n个整数排列

题目详情
如何在O(n)时间内,对0到n的平方减一的n个整数排列
▼优质解答
答案和解析
你指的是,将n个数按顺序排列,其中这n个数的范围在0到n的平方减一内吗?
如果是这样,你首先将每个数num化成num= u^2+v的形式(num开方取整求出u,然后v= num-u^2)
然后按照u的不同,将n个数分到n个数组(也可能少于n个数组).容易知道,u越小,num就越小.所以这里已经把num按u的大小排好了,接着只要对每个数组内部进行排序就行.
也就是在每个数组内,例如每个数组内有i个数,按照v的不同,将i个数分到i个数组,那么v越小,num越小.这样就得出答案了
我这里的数组应该说是链表才对,这样才能做到O(n)时间.
我再重述一下算法的核心思想:首先u越小,num就越小.u相同情况下,v越小,num就越小.