《剑指offer》第四十五题(把数组排成最小的数)
// 面试题45:把数组排成最小的数
// 题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼
// 接出的所有数字中最小的一个。例如输入数组{3, 32, 321},则打印出这3个数
// 字能排成的最小数字321323。 #include <iostream>
#include <string>
#include <algorithm> int compare(const void* strNumber1, const void* strNumber2); // int型整数用十进制表示最多只有10位
const int g_MaxNumberLength = ; char* g_StrCombine1 = new char[g_MaxNumberLength * + ];
char* g_StrCombine2 = new char[g_MaxNumberLength * + ]; void PrintMinNumber(const int* numbers, int length)
{
if (numbers == nullptr || length <= )
return; char** strNumbers = (char**)(new int[length]);//通过下面这个循环,把number里的每个数字,转化为strNumbers的二维数组中,注意**
for (int i = ; i < length; ++i)
{
strNumbers[i] = new char[g_MaxNumberLength + ];
sprintf(strNumbers[i], "%d", numbers[i]);
} qsort(strNumbers, length, sizeof(char*), compare);//快排函数,详见博客 for (int i = ; i < length; ++i)
printf("%s", strNumbers[i]);//将排序好的strNumbers逐个元素打印出来,即最小值
printf("\n"); for (int i = ; i < length; ++i)
delete[] strNumbers[i];//逐个删除
delete[] strNumbers;
} // 如果[strNumber1][strNumber2] > [strNumber2][strNumber1], 返回值大于0
// 如果[strNumber1][strNumber2] = [strNumber2][strNumber1], 返回值等于0
// 如果[strNumber1][strNumber2] < [strNumber2][strNumber1], 返回值小于0
int compare(const void* strNumber1, const void* strNumber2)//qsort的第四个参数,cmp函数,详见博客
{
// [strNumber1][strNumber2]
strcpy(g_StrCombine1, *(const char**)strNumber1);
strcat(g_StrCombine1, *(const char**)strNumber2); // [strNumber2][strNumber1]
strcpy(g_StrCombine2, *(const char**)strNumber2);
strcat(g_StrCombine2, *(const char**)strNumber1); return strcmp(g_StrCombine1, g_StrCombine2);
} // ====================测试代码====================
void Test(const char* testName, int* numbers, int length, const char* expectedResult)
{
if (testName != nullptr)
printf("%s begins:\n", testName); if (expectedResult != nullptr)
printf("Expected result is: \t%s\n", expectedResult); printf("Actual result is: \t");
PrintMinNumber(numbers, length); printf("\n");
} void Test1()
{
int numbers[] = { , , , , };
Test("Test1", numbers, sizeof(numbers) / sizeof(int), "");
} void Test2()
{
int numbers[] = { , , };
Test("Test2", numbers, sizeof(numbers) / sizeof(int), "");
} void Test3()
{
int numbers[] = { , , };
Test("Test3", numbers, sizeof(numbers) / sizeof(int), "");
} void Test4()
{
int numbers[] = { , , };
Test("Test4", numbers, sizeof(numbers) / sizeof(int), "");
} // 数组中只有一个数字
void Test5()
{
int numbers[] = { };
Test("Test5", numbers, sizeof(numbers) / sizeof(int), "");
} void Test6()
{
Test("Test6", nullptr, , "Don't print anything.");
} int main(int argc, char* argv[])
{
Test1();
Test2();
Test3();
Test4();
Test5();
Test6();
system("pause");
return ;
}
《剑指offer》第四十五题(把数组排成最小的数)的更多相关文章
- (剑指Offer)面试题33:把数组排成最小的数
题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 思路: 1.全 ...
- 《剑指offer》— JavaScript(32)把数组排成最小的数
把数组排成最小的数 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为3213 ...
- 剑指Offer(三十五):数组中的逆序对
剑指Offer(三十五):数组中的逆序对 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...
- 《剑指offer》第二十五题(合并两个排序的链表)
// 面试题25:合并两个排序的链表 // 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按 // 照递增排序的.例如输入图3.11中的链表1和链表2,则合并之后的升序链表如链 ...
- 《剑指offer》第十五题(二进制中1的个数)
// 面试题:二进制中1的个数 // 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如 // 把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. #inclu ...
- 剑指Offer(二十五):复杂链表的复制
剑指Offer(二十五):复杂链表的复制 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...
- 剑指Offer(二十八):数组中出现次数超过一半的数字
剑指Offer(二十八):数组中出现次数超过一半的数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...
- 《剑指offer》第二十六题(树的子结构)
// 面试题26:树的子结构 // 题目:输入两棵二叉树A和B,判断B是不是A的子结构. #include <iostream> struct BinaryTreeNode { doubl ...
- 《剑指offer》第十九题(正则表达式匹配)
// 面试题19:正则表达式匹配 // 题目:请实现一个函数用来匹配包含'.'和'*'的正则表达式.模式中的字符'.' // 表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次).在本题 ...
- 《剑指offer》第二十九题(顺时针打印矩阵)
// 面试题29:顺时针打印矩阵 // 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. #include <iostream> void PrintMatrixInC ...
随机推荐
- ELK学习笔记之F5-HTTP-requesting-logging logstash filter
input { tcp { port => 514 type => 'f5-request' } } filter { if [type] == "f5-request" ...
- PHP结合Vue实现上拉分页
效果图: <?php if(isset($_GET['data'])){ $data = [ [ 'title'=>1], [ 'title'=>2], [ 'title'=> ...
- RabbitMQ的安装与基本使用
运行环境:https://oneinstack.com/install/ 在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提 ...
- P2709 小B的询问(莫队)
P2709 小B的询问 莫队模板 资磁离线询问 维护两个跳来跳去的指针 先分块,蓝后询问按块排序. 蓝后每次指针左右横跳更新答案 #include<iostream> #include&l ...
- 深入理解 Vue 组件
深入理解 Vue 组件 组件使用中的细节点 使用 is 属性,解决组件使用中的bug问题 <!DOCTYPE html> <html lang="en"> ...
- python简说(六)判断
非空即真,非0即真True '1' [1] {k-v}False '' None [] {}
- 20145320《网络对抗》逆向及Bof基础实践
1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn20145320的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的 ...
- Python3基础 frozenset 使用list创建frozenset
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- 三星固态硬盘ssd产品线收集
目录 三星ssd按时间展示: 三星ssd后缀带a与不带a的区别,举其中一例: 下面是从三星中国的官网截图的产品线: 产品线列表: 总结: 参考: 最近在淘宝看到了很多拆机ssd,三星作为世界上唯一一家 ...
- HDU 6406 Taotao Picks Apples & FJUT3592 做完其他题后才能做的题(线段树)题解
题意(FJUT翻译HDU): 钱陶陶家门前有一棵苹果树. 秋天来了,树上的n个苹果成熟了,淘淘会去采摘这些苹果. 到园子里摘苹果时,淘淘将这些苹果从第一个苹果扫到最后一个. 如果当前的苹果是第一个苹果 ...