【面试编程题】巧妙排序:排序只有1,2,3三个元素的数组,不能统计1,2,3的个数。
题目来自陈利人的面试微信平台:待字闺中
题目描述如下:排序只有1,2,3三个元素的数组,不能统计1,2,3的个数。 希望大家能够相出多多的思路。比如,最小的空间,最少的次数。
首先的思路肯定是,时间复杂度最高的一种,按顺序扫描数组,遇到一个1,扔到最前面,遇到一个3,扔到最后面,这样的时间复杂度为O(n2)。
其次可以采用快排的交换思想,第一遍顺序扫描整个数组,分三种情况:1)数字为1,从数组开始后找第一个出现的数字2或者3,与本位置的1相对换;2)数字为2,从2的位置+1往后面找数字1,与本位置的2相对换;3)数字为3,不做处理,因为3本来就应该排在最后面的。这个时间复杂度在最坏情况下貌似还是O(n2)
第三种思路可以是以空间换时间的做法,申请一个与原数组相同大小的空间,扫描数组三遍,依次找出数组中为1,2,3,的元素,并依次添加到数组中。
其他的待会儿再想,应该还可以优化