面试题37:把数组排成最小的数
2015-12-30 22:38
399 查看
题目:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
边界条件及异常:
数组为空
思路:
这题可以需要建立对任意两个数自己的比较规则。然后根据这个规则进行排序即可。
如果是单位数,显然小的在前。
如果是32和321,结合后有32321和32132两种结果,比较这两种结果即可。
在程序中先将整数转为字符串,在进行比较与合并更方便。
比较规则确定后,用快速排序即可。
时间复杂度:O(nlgn)
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
边界条件及异常:
数组为空
思路:
这题可以需要建立对任意两个数自己的比较规则。然后根据这个规则进行排序即可。
如果是单位数,显然小的在前。
如果是32和321,结合后有32321和32132两种结果,比较这两种结果即可。
在程序中先将整数转为字符串,在进行比较与合并更方便。
比较规则确定后,用快速排序即可。
时间复杂度:O(nlgn)
#include <iostream> #include <vector> #include <queue> #include <string> #include <stack> #include <algorithm> #include <hash_set> //for hashtable #include <hash_map> #include <set> #include <ctime> using namespace std; const int maxNumberLength = 10; char *strCombine1 = new char[maxNumberLength * 2 + 1]; char *strCombine2 = new char[maxNumberLength * 2 + 1]; int myCompare(const void *x, const void *y) //qsort要求此处为void { strcpy_s(strCombine1, maxNumberLength * 2 + 1, *(const char**)x);//不能用(char *)&x strcat_s(strCombine1, maxNumberLength * 2 + 1, *(const char**)y); strcpy_s(strCombine2, maxNumberLength, *(const char**)y); strcat_s(strCombine2, maxNumberLength, *(const char**)x); return strcmp(strCombine1, strCombine2); } void PrintMinNumber(vector<int> nums) { int size = nums.size(); if (size <= 0) return; char **strNumbers = (char**)(new int[size]); for (int i = 0; i < size; ++i) { strNumbers[i] = new char[maxNumberLength + 1]; sprintf_s(strNumbers[i], maxNumberLength, "%d", nums[i]); } //sort(strNumbers.begin(), strNumbers.end(), myCompare); qsort(strNumbers, size, sizeof(char*), myCompare); //注意比较sort和qsort的区别 for (int i = 0; i < size; ++i) cout << strNumbers[i]; cout << endl; for (int i = 0; i < size; ++i) delete [] strNumbers[i]; delete[] strNumbers; } int main() { int arr[] = { 3, 32, 321 }; vector<int> nums(arr, arr + 3); PrintMinNumber(nums); return 0; }
相关文章推荐
- 面试题36:从1到n整数中1出现的次数
- java程序员工作三年的修行之路
- 面试干货
- 程序员如何谋划出月薪3万
- 程序员到底需要学习多少东西??
- C#与.NET程序员面试宝典 Day2
- 第一份程序员的自述
- 面试题35:连续子数组的最大和
- 下半年过了中项,感谢学院,感谢薛老师,后面就跟着学院的各位老师学与考了
- 下半年过了中项,感谢学院,感谢薛老师,后面就跟着学院的各位老师学与考了
- 下半年过了中项,感谢学院,感谢薛老师,后面就跟着学院的各位老师学与考了
- 那些年我准备的前端面试题集合
- SQL Server DBA面试知识点(五)-- 索引与执行计划
- JAVA多线程和并发基础面试问答
- 15个顶级Java多线程面试题及回答
- 面试干货——年底干货大放送,你准备好了吗?
- 杨辉三角与一道经典笔试面试题目
- iOS面试题11- NSThread/NSOperation/GCD的优缺点总结
- 程序员技术练级攻略
- 假如编程易懂得,那么程序员就不会热情地写出注释,也不会有得到编程的快乐。