给你n个数字字符串 请你给出一种排列使得n个字符串连接后的字典序最大 若字典序最大的排列有多组则保留字典序小的在前面 例 2 55 5 输出 5 55
时间: 2024-02-12 09:07:12 浏览: 64
这道题目可以使用贪心算法来解决。我们可以对于所有的数字字符串按照字典序从大到小进行排序,然后将它们依次连接起来即可。
需要注意的是,如果存在多组字典序最大的排列,我们需要选择字典序小的排列。因此,在进行排序时,如果两个字符串的前缀相同,我们需要比较它们的长度。长度较长的字符串应该排在前面。
以下是参考代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 1005
char nums[MAXN][MAXN];
int cmp(const void *a, const void *b) {
char *s1 = *(char **)a;
char *s2 = *(char **)b;
char s3[MAXN * 2], s4[MAXN * 2];
strcpy(s3, s1);
strcat(s3, s2);
strcpy(s4, s2);
strcat(s4, s1);
return strcmp(s4, s3);
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s", nums[i]);
}
char *ptrs[MAXN];
for (int i = 0; i < n; i++) {
ptrs[i] = nums[i];
}
qsort(ptrs, n, sizeof(char *), cmp);
for (int i = 0; i < n; i++) {
printf("%s", ptrs[i]);
}
printf("\n");
return 0;
}
```
时间复杂度:O(nlogn),其中 n 是数字字符串的个数。排序的时间复杂度为 O(nlogn),连接字符串的时间复杂度为 O(n)。
阅读全文