Day16 2022.11.22 排序(简单)
45.把数组排成最小的数
自己实现
没有思路
题解
也是比较大小,只是这个比较大小的方法是两个数字字符串string x
和string y
,如果x
+y
<y
+x
,说明x
应该在前面,这里暂且定义为x
<y
。然后正常比较大小,采用适当的排序方法即可
代码如下:
class Solution {
public:
string minNumber(vector<int>& nums) {
int min = 99999;
int i, j;
int pos;
for (i = 0; i < nums.size() - 1; i++)
{
min = nums[i];
pos = i;
for (j = i + 1; j < nums.size(); j++)
{
if (to_string(min) + to_string(nums[j]) > to_string(nums[j]) + to_string(min))
{
min = nums[j];
pos = j;
}
}
int tmp = nums[i];
nums[i] = nums[pos];
nums[pos] = tmp;
}
string res = "";
for (i = 0; i < nums.size(); i++)res += to_string(nums[i]);
return res;
}
};
代码表现
因为采用的是最简单的选择排序,所以时间很久
hint:
- int和string的互相转化
- int转成string:
string str=to_string(i);
- string转成int:
int a=atoi(str.c_str())
- int转成string:
61.扑克牌中的顺子
自己实现
一开始想的是直接排序,因为大小王是0所以会被直接放到数组最开始,然后再判断后面的相邻两个元素之间的差值是否能满足。但是感觉这个方法很难实现并且很慢,所以直接看题解了。
题解
满足两个条件即符合顺子:
- 除了大小王(0)之外没有重复的牌
- ***最大值-最小值<5
代码如下:
class Solution {
public:
bool isStraight(vector<int>& nums) {
set<int> repeat;
if(nums.size()!=5)return false;
int i;
int max=-1;
int min=20;
for(i=0;i<nums.size();i++)
{
if(nums[i]!=0 && repeat.count(nums[i])==1)return false;
repeat.insert(nums[i]);
if(nums[i]!=0)
{
if(nums[i]>max)max=nums[i];
if(nums[i]<min)min=nums[i];
}
}
if(max-min<5)return true;
return false;
}
};
代码表现
hint:
- 处理几个值是否连续且这几个值不重复的判断时,可以采用
最大值-最小值
来进行判断,即将值框定在某个范围内即可,这样的判断很牛 - set容器的一些操作
原文地址:http://www.cnblogs.com/cspzyy/p/16928499.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性