第一题:
分析:

这道题呢,就是让你交换奇偶性相同的两个数字,让最后的值变成最大,解题 的方式有很多,
第一种能想到的就是一个数字一个数字的交换(同奇同偶),再进行比较,但是这种方法的可行性不高并且非常繁琐,稍有不注意就会少一种情况。
第二种方式就是开两个数组,通过求余数的方式,把奇数偶数分别放到不同的数组,把两个数组进行排序,再次遍历原来的数,判断每一位是技术还是偶数,从而从不同的数组中取出相应的大值,进行输出。
第三种就是利用双指针,所谓的双指针就是两层循环,外(i)层从开头开始遍历,内(j)层从末尾开始遍历,如果是同奇同偶,并且在加一个条件,就是下标为i的值要小于下标为j的值,这样就保证了交换后的一定比交换前的数值大。

源码:
解法一:

就不写了,比较麻烦

解法二:

class Solution {
public:
int largestInteger(int num) {
    // 1、将奇数和偶数分别存在在两个数组中,然后进行从大到小的排序
    vector<int> v1,v2;
    string s=to_string(num);
    for(char c:s){
        int x=c-'0';
        if(x&1)v2.push_back(x);
        else v1.push_back(x);
    }
    sort(v1.rbegin(),v1.rend()),sort(v2.rbegin(),v2.rend());
    int a=0,b=0;
    int res=0;
    // 2、重新开始遍历数字,若为偶数则添加偶数数组中数字;若为奇数则添加奇数数组中的数字
    for(char c:s){
        int x=c-'0';
        if(x&1)res=res*10+v2[b++];
        else res=res*10+v1[a++];
    }
    return res;
    }
};

解法三:

  class Solution {
  public:
  int largestInteger(int num) {
      string ss=to_string(num);
      for(int i=0;i<ss.size();i++)
      {
          for(int j=ss.size();j>i;j--)
          {
              if((ss[j]-ss[i])%2==0&&ss[i]<ss[j])
              {
                  swap(ss[i],ss[j]);
              }
          }
      }
      return stoi(ss);
      }
  };

第三题:
分析:

这道题呢,通过找规律可以发现,每次加1的那个数一定是数组中最小的那个,所以这道题变得非常简单,只用操作前找到最小的值,最后再进行想乘。注意测试用例可能会很大所以每次都要对10^9+7取余;

源码:

class Solution {
public:
    int maximumProduct(vector<int>& nums, int k) {
    // for(int i=0;i<k;i++)
    // {
    //     int a=min_element(nums.begin(),nums.end())- 
 nums.begin();
    //     nums[a]+=1;
    // }
    // long long sum=1;
    // for(int i=0;i<nums.size();i++)
    // {
    //     sum*=nums[i];
    //     sum%=1000000007;
    // }
    priority_queue<int,vector<int>,greater<int>> qw;
    for(int i:nums)
    {
        qw.push(i);
    }
    for(int i=0;i<k;i++)
    {
        int n=qw.top();
        qw.pop();
        qw.push(n+1);
    }
    long long sum=1;
    while(!qw.empty())
    {
        sum*=qw.top();
        qw.pop();
        sum%=1000000007;
    }
    return sum;
    }
};

注释部分运行时间:
2022-04-10T12:33:11.png
没注释部分:
2022-04-10T12:33:55.png