aboutsummaryrefslogtreecommitdiff
path: root/contiguous_array.c
diff options
context:
space:
mode:
Diffstat (limited to 'contiguous_array.c')
-rw-r--r--contiguous_array.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/contiguous_array.c b/contiguous_array.c
new file mode 100644
index 0000000..fbd8c9a
--- /dev/null
+++ b/contiguous_array.c
@@ -0,0 +1,27 @@
+// 525. Contiguous Array
+#include "leetcode.h"
+
+/*
+ * given a binary array 'nums' return the maximum length of a contiguous
+ * subarray with an equal number of 0 and 1.
+ */
+
+int findMaxLength(int *nums, int numsSize) {
+ int max = 0, bl = 0, arr[2 * numsSize + 1];
+ for (int i = 0; i < 2 * numsSize + 1; i++)
+ arr[i] = -2;
+ arr[numsSize] = -1;
+ for (int i = 0; i < numsSize; i++) {
+ nums[i] ? bl++ : bl--;
+ if (arr[numsSize + bl] < -1)
+ arr[numsSize + bl] = i;
+ max = fmax(max, i - arr[numsSize + bl]);
+ }
+ return max;
+}
+
+int main() {
+ int n1[] = {0, 1}, n2[] = {0, 1, 0};
+ printf("%d\n", findMaxLength(n1, ARRAY_SIZE(n1))); // expect: 2
+ printf("%d\n", findMaxLength(n2, ARRAY_SIZE(n2))); // expect: 2
+}