Giả sử chúng ta có một danh sách các số nguyên, chúng ta phải sắp xếp danh sách theo cách này -
-
Phần tử đầu tiên là tối đa
-
Yếu tố thứ hai là tối thiểu
-
Phần tử thứ ba là tối đa thứ hai
-
Yếu tố thứ tư là tối thiểu thứ 2
Và như vậy.
Vì vậy, nếu đầu vào là [6,3,10,4], thì đầu ra sẽ là [10, 3, 6, 4]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Xác định ret mảng
-
sắp xếp số mảng
-
j:=kích thước của nums - 1
-
i:=0
-
trong khi tôi <=j, làm -
-
chèn nums [j] vào cuối ret
-
(giảm j đi 1)
-
nếu tôi <=j, thì -
-
chèn nums [i] vào cuối ret
-
(tăng tôi lên 1)
-
-
-
trả lại ret
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#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));
} Đầu vào
{6,3,10,4} Đầu ra
10, 3, 6, 4