สมมติว่าเรามีรายการตัวเลข เราต้องกำหนดเมธอดที่สามารถหมุนรายการตัวเลขไปทางซ้าย k องค์ประกอบ
เช่น หากอินพุตคือ [5,4,7,8,5,6,8,7,9,2], k = 2 ผลลัพธ์จะเป็น [8,5,6,8,7,9,2,5,4,7]
ขั้นตอนการแก้ปัญหา
- สร้างอาร์เรย์ ret สำหรับผลลัพธ์
- n = ขนาดของ nums, k = k mod n
- คัดลอก nums[k] ถึง nums[n-1] เข้า ret
- คัดลอก nums[0] ถึง nums[k-1] เข้า ret
- คืนค่า ret
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v) {
cout << "[";
for (int i = 0; i < v.size(); i++) cout << v[i] << ", ";
cout << "]" << endl;
}
class Solution {
public:
vector<int> solve(vector<int>& nums, int k) {
vector<int> ret;
int n = nums.size();
k %= n;
for (int i = k; i < n; i++) ret.push_back(nums[i]);
for (int i = 0; i < k; i++) ret.push_back(nums[i]);
return ret;
}
};
int main() {
Solution ob;
vector<int> v = {5, 4, 7, 8, 5, 6, 8, 7, 9, 2};
print_vector(ob.solve(v, 3));
}
อินพุต
{5,4,7,8,5,6,8,7,9,2}, 2
เอาต์พุต
[8, 5, 6, 8, 7, 9, 2, 5, 4, 7, ]