首页 > 其他分享 >剑指 Offer 45. 把数组排成最小的数

剑指 Offer 45. 把数组排成最小的数

时间:2023-04-18 11:57:51浏览次数:49  
标签:排成 string nums int Offer 45 return dp cmp

题目链接:剑指 Offer 45. 把数组排成最小的数

方法:排序

解题思路

  • 将数字转化为字符串数组,然后 \(sort()\);
  • cmp()函数
static bool cmp(string a, string b) {
    return a + b < b + a;
}

代码

// 写法一
class Solution {
public:
    static bool cmp(string a, string b) {
        return a + b < b + a;
    }
    string minNumber(vector<int>& nums) {
        int n = nums.size();
        vector<string> dp(n);
        for (int i = 0; i < n; i ++ ) dp[i] = to_string(nums[i]);
        sort(dp.begin(), dp.end(), cmp);
        for (int i = 1; i < n; i ++ ) dp[i] = dp[i - 1] + dp[i];
        return dp[n - 1];
    }
};

// 写法2,较慢
class Solution {
public:
    static bool cmp(int a, int b) {
        return to_string(a) + to_string(b) < to_string(b) + to_string(a);
    }
    string minNumber(vector<int>& nums) {
        sort(nums.begin(), nums.end(), cmp);
        string ans;
        for (int i = 0; i < nums.size(); i ++ ) ans += to_string(nums[i]);
        return ans;
    }
};

复杂度分析

时间复杂度:\(O(nlogn)\);
空间复杂度:写法一:\(O(n)\),写法二:\(O(1)\),忽略排序时的调用栈。

标签:排成,string,nums,int,Offer,45,return,dp,cmp
From: https://www.cnblogs.com/lxycoding/p/17329065.html

相关文章

  • ERROR 1045 (28000): Access denied for user '-root'@'localhost' (using password:
    以下是cmd的操作(重启服务,修改my.ini文章下面有my.ini配置) 当修改密码为123456是sqlyog连接成功修改为root时连接报老错误,又修改为123456在修改为root就连接正常了MicrosoftWindows[版本10.0.18363.1139](c)2019MicrosoftCorporation。保留所有权利。C:\ProgramFiles......
  • 【剑指 Offer】67. 把字符串转换成整数
    【题目】写一个函数StrToInt,实现把字符串转换成整数这个功能。不能使用atoi或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起......
  • 动态规划:剑指 Offer 42. 连续子数组的最大和
    题目描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 提示:1<= arr.length<=10^5-100<=arr[i]<=100   classSolution{publicintmaxSubArray(intnums[]){intres......
  • 【剑指 Offer】 31. 栈的压入、弹出序列
    【题目】输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5}是某栈的压栈序列,序列{4,5,3,2,1}是该压栈序列对应的一个弹出序列,但{4,3,5,1,2}就不可能是该压栈序列的弹出序列。 示例1:......
  • 【js】时间戳转时间 1680338700 =》2023-04-01 16:45:00
    1transformTimestamp(timestamp){2letdate=newDate(parseInt(timestamp)*1000)3letYear=date.getFullYear()4letMoth=(date.getMonth()+1<10?'0'+(date.getMonth()+1):date.getMonth()+1)5letDay=(date.getDat......
  • 【剑指 Offer】 29. 顺时针打印矩阵
    【题目】输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:输入:matrix= [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7] 限制:0<=matrix.leng......
  • UVA1451
     二分平均值x,每个数减去x,   找区间S[r]-S[l]>=0,r-l>=m#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;constintN=1e5+5;#defineinf1e9intn,m,a[N];doubles[N];intchk(doublemd,intok=0){ i......
  • 2023-3-16 #45 花花绿绿的色块勉勉强强拼凑成
    这是之前的博客。鸽了一年的ZYLOI终于举办了!讲完题的一刻,感觉心中的大石头终于落下来了!265P9150邮箱题很不错的题!!分置换环考虑,我们将一个置换环上的结点重新编号为\(1,2,\cdots,n\),倍长后断环为链。我们尝试维护若干条有序的链,每条链由一些点双连成。从后往前扫描每个点,......
  • 【剑指 Offer 】62. 圆圈中最后剩下的数字
    【题目】0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的......
  • 【剑指 Offer】 57 - II. 和为s的连续正数序列
    【题目】输入一个正整数target,输出所有和为target的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例1:输入:target=9输出:[[2,3,4],[4,5]]示例2:输入:target=15输出:[[1,2,3,4,5],[4,5,6],[7,8]] 限制:   1<=target......