สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n ในการดำเนินการเดียว เราสามารถเพิ่ม 1 ด้วยองค์ประกอบที่กำหนดไว้ล่วงหน้าใน A หากผลรวมหรือผลคูณขององค์ประกอบทั้งหมดในอาร์เรย์มีค่าเท่ากับศูนย์ เราสามารถทำการดำเนินการนี้ได้อีกครั้ง เราต้องนับจำนวนขั้นตอนขั้นต่ำที่จำเป็นเพื่อให้ทั้งผลรวมและผลิตภัณฑ์ขององค์ประกอบทั้งหมดในอาร์เรย์แตกต่างจากศูนย์หรือไม่
ดังนั้น หากอินพุตเป็น A =[-1, 0, 0, 1] ผลลัพธ์จะเป็น 2 เพราะทั้งผลคูณและผลรวมเป็น 0 หากเราบวก 1 เข้ากับองค์ประกอบที่สองและองค์ประกอบที่สาม อาร์เรย์จะ เป็น [-1,1,1,1] ผลรวมจะเท่ากับ 2 และผลคูณจะเท่ากับ -1
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
sum := 0 cnt := 0 n := size of A for initialize i := 0, when i < n, update (increase i by 1), do: x := A[i] sum := sum + x cnt := cnt + (if x is same as 0, then 1, otherwise 0) return (if sum + cnt is same as 0, then cnt + 1, otherwise cnt)
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A) {
int sum = 0, cnt = 0;
int n = A.size();
for (int i = 0; i < n; i++) {
int x = A[i];
sum += x;
cnt += x == 0 ? 1 : 0;
}
return sum + cnt == 0 ? cnt + 1 : cnt;
}
int main() {
vector<int> A = { -1, 0, 0, 1 };
cout << solve(A) << endl;
} อินพุต
{ -1, 0, 0, 1 } ผลลัพธ์
2