สมมติว่าเรามีอาร์เรย์ 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