全国排名2600+,正常发挥属于是,力扣自己举办的参加的人还是不少
1.对奇偶下标分别排序
小心别把奇数和奇数下标弄混
题解
class Solution {
public:
vector<int> sortEvenOdd(vector<int>& nums) {
vector<int> number;//保存值
vector<int> result;//返回值
int n=nums.size(),m=nums.size();
if(n%2==1)
n--;
if(n==0)
return nums;
for(int i=n-1;i>0;i-=2)
{
number.push_back(nums[i]);
nums.erase(nums.begin()+i);
}
sort(nums.begin(),nums.end());
sort(number.rbegin(),number.rend());
nums.insert(nums.end(),number.begin(),number.end());
for(int i=0,j=0;i<m;j++)
{
result.push_back(nums[j]);
i++;
if(i>=m)
break;
result.push_back(number[j]);
i++;
}
return result;
}
};
vector的insert方法
两个vector合并
vector<string>vec1,vec2,vec3;
//... vec1,vec2赋值
vec3.insert(vec3.end(),vec1.begin(),vec1.end());
vec3.insert(vec3.end(),vec2.begin(),vec2.end());
merge
与之类似的有中的merge() 方法
//以默认的升序排序作为排序规则
OutputIterator merge (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result);
//以自定义的 comp 规则作为排序规则
OutputIterator merge (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result, Compare comp);
//如
int first[] = { 5,10,15,20,25 };
int second[] = { 7,17,27,37,47,57 };
vector<int> myvector(11);
merge(first, first + 5, second, second + 6, myvector.begin());
for (vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it) {
cout << *it << ' ';//*it可以取出值来
}
迭代器的定义
vector<int>::iterator it = vect.begin();
vector的erase方法
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
删除一个元素(position),或者范围元素[first, last) 前闭后开
采用remove()一般情况下不会改变容器的大小,而pop_back()与erase()等成员函数会改变容器的大小。
sort的逆向排序
sort(vector.rbegin(),vector.rend());
运算符重载
重载运算符限制在C++语言中已有的运算符范围内的允许重载的运算符之中,不能创建新的运算符。
语法格式如下
<返回类型> operator <运算符符号>(<参数>)
{
<定义>;
}
//例如
struct node
{
int id;
double x,y;
}//定义结构体
bool operator <(const node &a,const node &b)
{
return a.x<b.x && a.y<b.y;
}//重载运算符“<”
2.重排数字的最小值
题解
class Solution {
public:
long long smallestNumber(long long num) {
int flag=0;//正数
vector<int> a;
long long result;
if(num<10&&num>-10)
return num;
if(num<0)
{
flag=1;
num=-num;
}
int n=num%10;
while(1)
{
a.push_back(n);
if(num==n)
break;
num=(num-n)/10;
n=num%10;
}
sort(a.begin(),a.end());
int i=0;//0数
for(;a[i]==0;i++);
if(flag==0)
{
result=a[i];
a.erase(a.begin()+i);
for(int j=0;j<a.size();j++)
{
result*=10;
result+=a[j];
}
return result;
}
if(flag==1)
{
result=a[a.size()-1];
a.erase(a.end()-1);
sort(a.rbegin(),a.rend());
for(int j=0;j<a.size();j++)
{
result*=10;
result+=a[j];
}
return -result;
}
return -1;
}
};
Rohin Garg 大佬的解答
class Solution {
public:
long long smallestNumber(long long num) {
if (num < 0) {
string s = to_string(-num);
sort(s.rbegin(), s.rend());
return -stoll(s);//stoll:字符串转long long
}
if (num == 0) return 0;
string s = to_string(num);
sort(s.begin(), s.end());
int i = 0;
while (s[i] == '0') i++;
char c = s[i];
s.erase(s.begin() + i);
s = c + s;//string和char做加法
return stoll(s);
}
};
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);
stoi,stoll,stof,stod
以上方法分别将字符串转换为整型,longlong,浮点,double
第三题,第四题没看,因为第一题看错了几次题目。。。