拆分数位后四位数字的最小和
解答
class Solution {
public:
int minimumSum(int num) {
vector<int> a(4);
a[0]=num/1000;
a[1]=(num-a[0]*1000)/100;
a[2]=(num-a[0]*1000-a[1]*100)/10;
a[3]=num-a[0]*1000-a[1]*100-a[2]*10;
sort(a.begin(),a.end());
return (a[0]+a[1])*10+a[2]+a[3];
}
};
tzxydby 大佬的解答
思路是转化成字符串再排序
class Solution
{
public:
int minimumSum(int num)
{
string s=to_string(num);
sort(s.begin(),s.end());
return (s[0]+s[1]-'0'*2)*10+s[2]+s[3]-'0'*2;
}
};
根据给定数字划分数组
题解
class Solution {
public:
vector<int> pivotArray(vector<int>& nums, int pivot) {
vector<int> a;
int flag_equal=0,j=0;
for(int i=0;i<nums.size();i++)
{
if(nums[i]<pivot)
{
nums[j]=nums[i];
j++;
}
else if(nums[i]==pivot)
flag_equal++;
else if(nums[i]>pivot)
{
a.push_back(nums[i]);
}
}
for(;flag_equal>0;j++,flag_equal--)
nums[j]=pivot;
for(int i=0;j<nums.size();j++,i++)
nums[j]=a[i];
return nums;
}
};
三个数组实现
还是上面大佬的题解
using namespace std;
class Solution
{
public:
vector<int>pivotArray(vector<int>& a,int p)
{
vector<int>z,c,d;
for(auto j:a)
{
if(j<p)
z.push_back(j);
else if(j==p)
c.push_back(j);
else
d.push_back(j);
}
for(auto j:c)
z.push_back(j);
for(auto j:d)
z.push_back(j);
return z;
}
};
for(auto a:b)用法
C11新特性
for(auto a:b)中b为一个容器,效果是利用a遍历并获得b容器中的每一个值,但是a无法影响到b容器中的元素。
for(auto &a:b)中加了引用符号,可以对容器中的内容进行赋值,即可通过对a赋值来做到容器b的内容填充。
设置时间的最少代价
这题自己想复杂了
参考答案
对每一个分钟数的情况进行讨论
class Solution {
public:
int minCostSetTime(int s, int v, int p, int t) {
int res=-1;
for (int i=0;i*60<=t&&i<=99;i++)
{
int x=t-i*60;
if (x>99) continue;//秒的时间超了
int nowv=0;
static int a[5];
a[4]=x%10;
a[3]=x/10;
a[2]=i%10;
a[1]=i/10;
int nowl=0;
for (int j=1;j<=4;j++)
{
if (a[j]==0) nowl++;
else break;
}
int nows=s;//nows就是现在的手指数字
for (int j=nowl+1;j<=4;j++)//注意是从下标0开始存储的
{
if (nows!=a[j]) nowv+=v;//加上移动时间
nowv+=p;//加上按压时间
nows=a[j];
}
if (res==-1) res=nowv;
else res=min(res,nowv);
}
return res;
}
};
删除元素后和的最小差值
题目不长但是很难