aboutsummaryrefslogtreecommitdiff
path: root/longest_well_perform_int.c
diff options
context:
space:
mode:
Diffstat (limited to 'longest_well_perform_int.c')
-rw-r--r--longest_well_perform_int.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/longest_well_perform_int.c b/longest_well_perform_int.c
new file mode 100644
index 0000000..b73aa4d
--- /dev/null
+++ b/longest_well_perform_int.c
@@ -0,0 +1,32 @@
+// 1124. Longest Well-Performing Interval
+#include "leetcode.h"
+
+/*
+ * given 'hours', a list of number of hours worked per day for a given employee.
+ * a day is considered to be a tiring day if and only if the number of hours
+ * worked is strictly greater than 8. a well performing interval is an interval
+ * of days for which the number of tiring days is strictly larger than the
+ * number of non tiring days. return the length of the longest well performing
+ * interval
+ */
+
+int longestWPI(int *hours, int hours_size) {
+ int cnt[10001] = {0}, t = 0, max = 0;
+ for (int i = 0; i <= hours_size; i++)
+ cnt[i] -= 1;
+ for (int i = 0; i < hours_size; i++) {
+ if (hours[i] > 8)
+ t++;
+ else
+ t--;
+ if (t < 0 && cnt[abs(t - 1)] >= 0 && i - cnt[abs(t - 1)] > max)
+ max = i - cnt[abs(t - 1)];
+ }
+ return max;
+}
+
+int main() {
+ int h1[] = {9, 9, 6, 0, 6, 6, 9}, h2[] = {6, 6, 6};
+ printf("%d\n", longestWPI(h1, ARRAY_SIZE(h1))); // expect: 3
+ printf("%d\n", longestWPI(h2, ARRAY_SIZE(h2))); // expect: 0
+}