C ++中的大到小排序

假设我们有一个整数nums列表,我们必须以这种方式对列表进行排序-

  • 第一个元素最大

  • 第二要素最少

  • 第三个元素是第二个最大值

  • 第四个元素是第二个最小值

等等。

因此,如果输入类似于[6,3,10,4],则输出将为[10、3、6、4]

为了解决这个问题,我们将遵循以下步骤-

  • 定义数组ret

  • 对数组数字进行排序

  • j:= nums的大小-1

  • i:= 0

  • 当我<= j时,-

    • 在ret的末尾插入nums [i]

    • (将i增加1)

    • 在ret的末尾插入nums [j]

    • (将j减1)

    • 如果i <= j,则-

    • 返回ret

    让我们看下面的实现以更好地理解-

    示例

    #include <bits/stdc++.h>
    using namespace std;
    void print_vector(vector<auto> v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    class Solution {
       public:
       vector<int> solve(vector<int> & nums) {
          vector<int> ret;
          sort(nums.begin(), nums.end());
          int j = nums.size() - 1;
          int i = 0;
          while (i <= j) {
             ret.push_back(nums[j]);
             j--;
             if (i <= j) {
                ret.push_back(nums[i]);
                i++;
             }
          }
          return ret;
       }
    };
    main() {
       Solution ob;
       vector<int> v = {6,3,10,4};
       print_vector(ob.solve(v));
    }

    输入项

    {6,3,10,4}

    输出结果

    10, 3, 6, 4