算法题:Find the latest version# JobHunting - 待字闺中
s*u
1 楼
http://www.careercup.com/question?id=5673258271637504
Find the latest version of released software. For e.g1. 2 and 2.2.. latest
is 2.2. eg2: 3.1 and 3.1.3... latest version is 3.1.3... version is passed
as string in above format.
一道面经,感觉还是蛮有意思的。正好复习了下怎么用stringstream把string转换成
int/double/
下面的回复,一种解法是把3.1.3转换成一个数组{3,1,3},然后对所有数组补0,再依
次从右往左对每一位排序(有点像radix sort)但是这样感觉还是比较繁琐,相当于对
每一位都要做一次快排,也就是O(knlogn)
另一位说用radixsort,就是从右往左,每次做一个bucket sort。这样的好处是,每一
位只要O(n),总共O(kn)。但坏处是,比如其中一位是很大的数,那么开的空间就要很
大,其实time cost也不再是O(n),而是O(max)。
我想了一下,既然只是要求最大版本。那就从第一位开始,每一位遍历。找到最大值之
后,将所有该位不存在,或者该位小于最大值的那个vector删除,或者用bool数组标记
下false。从左到右走一遍,最后只剩下一个vector。
不知道是不是最优解法。
还有一个问题就是怎么把比如3.12.4.7转换为vector {3,12,4,7}
我想的办法是将所有'.'改成‘ ’,然后用while(stringstream >> num)
估计有更好的办法?基础不扎实,所以一会用用sscanf,一会用用stringstream,都用
不好。
Find the latest version of released software. For e.g1. 2 and 2.2.. latest
is 2.2. eg2: 3.1 and 3.1.3... latest version is 3.1.3... version is passed
as string in above format.
一道面经,感觉还是蛮有意思的。正好复习了下怎么用stringstream把string转换成
int/double/
下面的回复,一种解法是把3.1.3转换成一个数组{3,1,3},然后对所有数组补0,再依
次从右往左对每一位排序(有点像radix sort)但是这样感觉还是比较繁琐,相当于对
每一位都要做一次快排,也就是O(knlogn)
另一位说用radixsort,就是从右往左,每次做一个bucket sort。这样的好处是,每一
位只要O(n),总共O(kn)。但坏处是,比如其中一位是很大的数,那么开的空间就要很
大,其实time cost也不再是O(n),而是O(max)。
我想了一下,既然只是要求最大版本。那就从第一位开始,每一位遍历。找到最大值之
后,将所有该位不存在,或者该位小于最大值的那个vector删除,或者用bool数组标记
下false。从左到右走一遍,最后只剩下一个vector。
不知道是不是最优解法。
还有一个问题就是怎么把比如3.12.4.7转换为vector {3,12,4,7}
我想的办法是将所有'.'改成‘ ’,然后用while(stringstream >> num)
估计有更好的办法?基础不扎实,所以一会用用sscanf,一会用用stringstream,都用
不好。