https://leetcode.com/problems/largest-number/
Когда я решал вышеуказанную проблему, я столкнулся со случаем, когда std::sort()
выдавало мне ошибку времени выполнения, но заменив его на std::stable_sort()
, тогда ошибки времени выполнения не было. Почему?
Линия выделена стрелкой справа
Код:
class Solution {
public:
string reverse(string str)
{
int n=str.length();
for(int i=0;i<n/2;i++)
{
swap(str[i],str[n-i-1]);
}
return str;
}
static bool comp(string s1,string s2)
{
int min_val=min(s1.length(),s2.length());
int i=0;
bool flag=false;
for(;i<min_val;i++)
{
if((s1[i]-'0')==(s2[i]-'0'))
{
flag=true;
continue;
}
return (s1[i]-'0')>(s2[i]-'0');
}
if(flag==true && s1.length()==s2.length())
{
return s1==s2;
}
string s1_temp=s1;
string s2_temp=s2;
s1_temp+=s2;
s2_temp+=s1;
return s1_temp>s2_temp;
}
string largestNumber(vector<int>& nums)
{
string str="";
vector<string> inp;
for(int i=0;i<nums.size();i++)
{
string temp="";
long long int num=nums[i];
if(num!=0)
{
while(num!=0)
{
temp+=((num%10)+'0');
num/=10;
}
}
else
{
temp+=(num+'0');
}
inp.push_back(reverse(temp));
}
stable_sort(inp.begin(),inp.end(),comp); // <-- This Line
string res="";
for(int i=0;i<inp.size();i++)
{
res+=inp[i];
}
cout<<"yes"<<endl;
if(res[0]=='0')
{
return "0";
}
return res;
}
};
Прецедент:
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
Может ли кто-нибудь объяснить мне причину, почему это произошло?
comp
? - person Jan Schultke   schedule 27.05.2020main
? Где твои#include
? - person Jabberwocky   schedule 27.05.2020std::sort
должен возвращать false, когда значения равны, иначе у вас будет неопределенное поведение. - person Alan Birtles   schedule 27.05.2020(s1[i]-'0')==(s2[i]-'0')
такое же, какs1[i]==s2[i]
и то же самое для<
- person 463035818_is_not_a_number   schedule 27.05.2020