สมมติว่าเรามีรายการจำนวนเต็ม เราต้องเรียงลำดับรายการในลักษณะนี้ -
-
องค์ประกอบแรกสูงสุด
-
องค์ประกอบที่สองขั้นต่ำ
-
องค์ประกอบที่สามคือสูงสุดที่ 2
-
องค์ประกอบที่สี่คือขั้นต่ำที่ 2
เป็นต้น
ดังนั้น หากอินพุตเป็น [6,3,10,4] ผลลัพธ์จะเป็น [10, 3, 6, 4]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดอาร์เรย์ ret
-
จัดเรียงตัวเลขอาร์เรย์
-
j :=ขนาดของ nums - 1
-
ผม :=0
-
ในขณะที่ฉัน <=j ทำ -
-
ใส่ nums[j] ต่อท้าย ret
-
(ลด j โดย 1)
-
ถ้าฉัน <=j แล้ว −
-
ใส่ nums[i] ต่อท้าย ret
-
(เพิ่ม i ขึ้น 1)
-
-
-
รีเทิร์น
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#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