1.给2000千万高考学生排序,要求要能根据分数找到该学生的排名?
千万别被2000千万这个数字唬住,理性的看一下题,“高考”这个词不知道你注意到了没?这是一个隐藏条件。你高考考了多少分?
总分多少?可能有的小伙伴已经反应过来了。高考700分,那我们开一个700大小的数组,记录每个分数的的个数就可以了。
对,就是使用桶排序的算法,来进行排。
这一类题他虽然样子很吓人,但是仔细 发现他的范围很小,就抓住他这个范围小来做文章。
时间复杂度:n 空间复杂度也是700
2.给2亿个不重复的正整数进行排序(范围0-2亿)?
一个数比一个数夸张,刚才我们使用的桶排序,现在数的范围是很大的,所以我们应该想怎么把他存储起来,既能节省空间还快,主要是你怎么来存储,2亿个int类型,一个int4bit,也就是需要8亿bit(8亿bit大概等于800M,内存恐怕吃不消)。
此时有一个“不重复”这三个字就特别扎眼,我们怎么利用这个特性呢?
我们居然不能用一个int去装,那我们就可以用一位去装,int = 4bit = 32位。
那么用的空间就是:2亿/32 (大概是25M)这下内存轻轻松松。
25M大概需要600万长度的数组。
做法详情x为待排序数字。 x/32找到数组下标。x%32找到它对应的位,然后把该位置为1。
这样就用奇技淫巧给解决掉了。
3.给你一个超大的文件,