aboutsummaryrefslogtreecommitdiff
path: root/min_equal_sum_two_arr.c
diff options
context:
space:
mode:
Diffstat (limited to 'min_equal_sum_two_arr.c')
-rw-r--r--min_equal_sum_two_arr.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/min_equal_sum_two_arr.c b/min_equal_sum_two_arr.c
new file mode 100644
index 0000000..0814682
--- /dev/null
+++ b/min_equal_sum_two_arr.c
@@ -0,0 +1,35 @@
+// 2918. Minimum Equal Sum of Two Arrays After Replacing Zeros
+#include "leetcode.h"
+
+/*
+ * you are given two arrays 'nums1' and 'nums2' consisting of positive integers.
+ * you have to replace all the 0's in both arrays with strictly positive
+ * integers such that the sum of elements of both arrays becomes equal. return
+ * the minimum equal sum you can obtain, or -1 if it is impossible.
+ */
+
+long long minSum(int *nums1, int nums1Size, int *nums2, int nums2Size) {
+ long long sum1 = 0, sum2 = 0, zero1 = 0, zero2 = 0;
+ for (int i = 0; i < nums1Size; i++) {
+ zero1 += !nums1[i];
+ sum1 += fmax(nums1[i], 1);
+ }
+ for (int i = 0; i < nums2Size; i++) {
+ zero2 += !nums2[i];
+ sum2 += fmax(nums2[i], 1);
+ }
+ if (sum1 < sum2 && !zero1)
+ return -1;
+ if (sum1 > sum2 && !zero2)
+ return -1;
+ return fmax(sum1, sum2);
+}
+
+int main() {
+ int n11[] = {3, 2, 0, 1, 0}, n21[] = {6, 5, 0};
+ int n12[] = {2, 0, 2, 0}, n22[] = {1, 4};
+ printf("%lld\n",
+ minSum(n11, ARRAY_SIZE(n11), n21, ARRAY_SIZE(n21))); // expect: 12
+ printf("%lld\n",
+ minSum(n12, ARRAY_SIZE(n12), n22, ARRAY_SIZE(n22))); // expect: -1
+}