把数组排成最小的数
用sort库函数+Lambda表达式
但是就(s1+s2)<(s2+s1)的理论证明就算了 记住它就好
class Solution {
public:
string minNumber(vector<int>& nums) {
//允许前导0,高位数字尽可能的小
//按特定规则对数组排序:
//1.高位最小的数字排在前面
//2.最高位一样,比较次高位,依次类推
sort(nums.begin(),nums.end(),[](int n1,int n2){
string s1=to_string(n1),s2=to_string(n2);
return (s1+s2)<(s2+s1);
});
string result;
for(int i : nums)
{
result+=to_string(i);
}
return result;
}
};
另外 快排记得回顾一下。
2.扑克牌中的顺子
如果直接用排序,发现处理大小王当赖子的问题就不太好处理。
如果5张牌要是顺子,需要满足的点:
除了0以外没有重复数字;//用set哈希方式来判断是否出现了重复元素
最大的牌-最小的牌<5。//维护a,b两个数
class Solution {
public:
bool isStraight(vector<int>& nums) {
int a=INT_MIN,b=INT_MAX;
set<int> set;
for(int i=0;i<nums.size();i++)
{
if(nums[i]==0) continue;
//有重复数字
if(set.find(nums[i])!=set.end()) return false;
set.insert(nums[i]);
a=max(a,nums[i]);
b=min(b,nums[i]);
}
return a-b<5;
}
};