第279次周赛总结

image-20220206154909058

全国排名2600+,正常发挥属于是,力扣自己举办的参加的人还是不少

image-20220206155144337

1.对奇偶下标分别排序

image-20220206160403306

小心别把奇数和奇数下标弄混

题解

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.重排数字的最小值

image-20220206171401442

题解

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

第三题,第四题没看,因为第一题看错了几次题目。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值