ปัญหา
ได้รับจำนวนเต็ม n ต้องคืนอาร์เรย์ที่มี n จำนวนเต็มที่ไม่ซ้ำกัน (Unique) ซึ่งผลรวมเท่ากับ 0 เช่น n = 5 → [-7, -1, 1, 3, 4]
วิธีแก้
- สร้างอาร์เรย์ A เป็นคำตอบ, x = 0
- ลูป i = 0 ถึง n-2:
- A[i] = i + 1
- x += i + 1
- A[n-1] = -x
- คืนค่า A
ตัวอย่างโค้ด
#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> sumZero(int n) {
vector<int> ans(n);
int x = 0;
for (int i = 0; i < n - 1; i++) {
ans[i] = (i + 1);
x += (i + 1);
}
ans[n - 1] = -x;
return ans;
}
};
int main() {
Solution ob;
print_vector(ob.sumZero(10));
}
อินพุต
10
เอาต์พุต
[1, 2, 3, 4, 5, 6, 7, 8, 9, -45, ]
คำอธิบาย
ใช้จำนวนเต็มบวก 1 ถึง n-1 แล้วตัวสุดท้ายเป็นลบของผลรวม (-(1+2+...+n-1)) รับประกันไม่ซ้ำและผลรวม 0
เช่น n=5: 1,2,3,4,-10 → sum=0