aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--num_smooth_descent_periods_stock.c30
-rw-r--r--num_smooth_descent_periods_stock.py30
2 files changed, 60 insertions, 0 deletions
diff --git a/num_smooth_descent_periods_stock.c b/num_smooth_descent_periods_stock.c
new file mode 100644
index 0000000..88f0bd6
--- /dev/null
+++ b/num_smooth_descent_periods_stock.c
@@ -0,0 +1,30 @@
+// 2110. Number of Smooth Descent Periods of a Stock
+#include "leetcode.h"
+
+/*
+ * you are given an integer array 'prices' representing the daily price history
+ * of a stock where 'prices[i]' is the stock price on the i'th day. a smooth
+ * descent period of a stock consists of one or more contiguous days such that
+ * the price on each day is lower than the price on the peceding day by
+ * exactly 1. the first day of the period is exempted from this rule. return the
+ * number of smooth descent periods.
+ */
+
+long long getDescentPeriods(int *prices, int pricesSize) {
+ int *dp = (int *)malloc(pricesSize * sizeof(int));
+ dp[0] = 1;
+ long long ans = 1;
+ for (int i = 1; i < pricesSize; i++) {
+ dp[i] = prices[i] == prices[i - 1] - 1 ? dp[i - 1] + 1 : 1;
+ ans += dp[i];
+ }
+ free(dp);
+ return ans;
+}
+
+int main() {
+ int p1[] = {3, 2, 1, 4}, p2[] = {8, 6, 7, 7}, p3[] = {1};
+ printf("%lld\n", getDescentPeriods(p1, ARRAY_SIZE(p1))); // expect: 7
+ printf("%lld\n", getDescentPeriods(p2, ARRAY_SIZE(p2))); // expect: 4
+ printf("%lld\n", getDescentPeriods(p3, ARRAY_SIZE(p3))); // expect: 1
+}
diff --git a/num_smooth_descent_periods_stock.py b/num_smooth_descent_periods_stock.py
new file mode 100644
index 0000000..2445bde
--- /dev/null
+++ b/num_smooth_descent_periods_stock.py
@@ -0,0 +1,30 @@
+# 2110. Number of Smooth Descent Periods of a Stock
+
+"""
+you are given an integer array 'prices' representing the daily price history
+of a stock where 'prices[i]' is the stock price on the i'th day. a smooth
+descent period of a stock consists of one or more contiguous days such that
+the price on each day is lower than the price on the peceding day by
+exactly 1. the first day of the period is exempted from this rule. return the
+number of smooth descent periods.
+"""
+
+
+class Solution(object):
+ def getDescentPeriods(self, prices):
+ """
+ :type prices: List[int]
+ :rtype: int
+ """
+ dp = [1] * len(prices)
+ for i in range(1, len(prices)):
+ if prices[i] == prices[i - 1] - 1:
+ dp[i] += dp[i - 1]
+ return sum(dp)
+
+
+if __name__ == "__main__":
+ obj = Solution()
+ print(obj.getDescentPeriods(prices=[3, 2, 1, 4]))
+ print(obj.getDescentPeriods(prices=[8, 6, 7, 7]))
+ print(obj.getDescentPeriods(prices=[1]))