vector实用算法(1)——排序

题目描述(选自剑指之把数组排成最小的数)

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

class Solution {
public:
    string PrintMinNumber(vector<int> numbers) {
        
    }
};

思路:

1.观察返回值是string类型,可知算法处理用到string
2.由题拼接,想到string函数的to_string()函数
3.所以我们可以用vector函数中的sort函数,降序拼接得到想要结果,怎么知道怎么降序?

 * 排序规则如下:

 * 若ab > ba 则 a > b,

 * 若ab < ba 则 a < b,

 * 若ab = ba 则 a = b;

 * 解释说明:

 * 比如 "3" "31"但是 "331" "313",所以要将二者拼接起来进行比较

代码如下:

头文件:

#include<iostream>
using namespace std;
#include <vector>
#include<string.h>

class Solution {
public:
    string PrintMinNumber(vector<int> numbers) {
        int num=numbers.size();
        string str;
        sort(numbers.begin(),numbers.end(),cmp);
        for(int i=0;i<num;i++)
        {
           str+=to_string(numbers[i]); 
        }
        return str;
     }
        static bool cmp(int a,int b)
        {
          string  A=to_string(a)+to_string(b);
          string  B=to_string(b)+to_string(a);
          return A<B;
        }
};

收获知识点:

以前最熟悉的就是vec.size(),vec.push_back()。sort函数说实话很少用。现在结合string的to_string()函数函数,才知道这么强大快捷。

有关于vector,具体看我的博客https://mp.csdn.net/postedit/89446250

18 .vector中元素的排序:

#include <algorithm>

bool cmp(int a,int b){

    return a>b;

}

sort(vec.begin(),vec.end(),cmp);   //  按升序排序

bool cmp(int a,int b){

    return a<b;

}

sort(vec.begin(),vec.end(),cmp); // 按降序排序

to_string()函数:将数值转为字符串

函数原型:
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);

循环拼接:

        for(int i=0;i<num;i++)
        {
           str+=to_string(numbers[i]); 
        }

猜你喜欢

转载自blog.csdn.net/weixin_40535588/article/details/89453996