aboutsummaryrefslogtreecommitdiff
path: root/challenge-202/eric-cheung/python/ch-2.py
diff options
context:
space:
mode:
author冯昶 <fengchang@novel-supertv.com>2023-02-06 18:29:49 +0800
committer冯昶 <fengchang@novel-supertv.com>2023-02-06 18:29:49 +0800
commit0f18fa3badcf6e6ddc58e793c868ce041054a496 (patch)
treead0b6ebe9b4b6b896475079163a282aec6b3fee3 /challenge-202/eric-cheung/python/ch-2.py
parentb99b26aef8b033642ff3794f0fddf6deb3234b43 (diff)
parentf92e84261b474f81c014f4982268d6e2797b66d9 (diff)
downloadperlweeklychallenge-club-0f18fa3badcf6e6ddc58e793c868ce041054a496.tar.gz
perlweeklychallenge-club-0f18fa3badcf6e6ddc58e793c868ce041054a496.tar.bz2
perlweeklychallenge-club-0f18fa3badcf6e6ddc58e793c868ce041054a496.zip
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'challenge-202/eric-cheung/python/ch-2.py')
-rwxr-xr-xchallenge-202/eric-cheung/python/ch-2.py127
1 files changed, 127 insertions, 0 deletions
diff --git a/challenge-202/eric-cheung/python/ch-2.py b/challenge-202/eric-cheung/python/ch-2.py
new file mode 100755
index 0000000000..5e7224f51f
--- /dev/null
+++ b/challenge-202/eric-cheung/python/ch-2.py
@@ -0,0 +1,127 @@
+
+## Remarks
+## https://www.geeksforgeeks.org/maximum-count-number-of-valley-elements-in-a-subarray-of-size-k/
+
+
+## Valley
+## First Part: Non-Increasing, Could Be Empty
+## Second Part: Non-Decreasing, Could Be Empty
+
+
+## arrInput = [1, 5, 5, 2, 8] ## Example 1
+## arrInput = [2, 6, 8, 5] ## Example 2
+## arrInput = [9, 8, 13, 13, 2, 2, 15, 17] ## Example 3
+## arrInput = [2, 1, 2, 1, 3] ## Example 4
+arrInput = [1, 3, 3, 2, 1, 2, 3, 3, 2] ## Example 5
+
+
+arrOutput = []
+arrInterOutput = []
+arrSubOutput = []
+arrTrendUpSign = []
+arrEqElem = []
+
+
+bTrendUp = True
+bPrevTrendUp = True
+bChangeSign = True
+bStart = True
+
+
+for nIndx in range(1, len(arrInput)):
+
+ if arrInput[nIndx - 1] < arrInput[nIndx]:
+ bTrendUp = True
+ elif arrInput[nIndx - 1] > arrInput[nIndx]:
+ bTrendUp = False
+ else:
+ arrEqElem.append(arrInput[nIndx])
+
+ if nIndx == 1:
+ bPrevTrendUp = bTrendUp
+ bChangeSign = True
+ elif bTrendUp and bPrevTrendUp or not bTrendUp and not bPrevTrendUp:
+ bChangeSign = False
+ elif len(arrSubOutput) > 0:
+ arrOutput.append(arrSubOutput)
+ arrTrendUpSign.append(not bTrendUp)
+ arrSubOutput = []
+ bChangeSign = True
+
+ if bChangeSign:
+ if len(arrEqElem) > 0:
+ arrSubOutput = arrSubOutput + arrEqElem ## Append List
+ arrEqElem = []
+
+ arrSubOutput.append(arrInput[nIndx - 1])
+
+ arrSubOutput.append(arrInput[nIndx])
+
+ bPrevTrendUp = bTrendUp
+
+
+if len(arrSubOutput) > 0:
+ arrOutput.append(arrSubOutput)
+ arrTrendUpSign.append(bTrendUp)
+ arrSubOutput = []
+
+
+## print (arrOutput)
+## print (arrTrendUpSign)
+
+for nIndx, arrElemLoop in enumerate(arrOutput):
+
+ ## print (bStart, arrTrendUpSign[nIndx])
+
+ if bStart and arrTrendUpSign[nIndx]:
+ if len(arrSubOutput) > 0:
+ for nCount in range(0, len(arrElemLoop)):
+ if arrElemLoop[nCount] != arrSubOutput[-1]:
+ break
+ arrSubOutput = arrSubOutput + arrElemLoop[nCount:] ## Append List
+ else:
+ arrSubOutput = arrSubOutput + arrElemLoop ## Append List
+
+ arrInterOutput.append(arrSubOutput)
+ arrSubOutput = []
+
+ elif bStart and not arrTrendUpSign[nIndx]:
+ if len(arrSubOutput) > 0:
+ for nCount in range(0, len(arrElemLoop)):
+ if arrElemLoop[nCount] != arrSubOutput[-1]:
+ break
+ arrSubOutput = arrSubOutput + arrElemLoop[nCount:] ## Append List
+ else:
+ arrSubOutput = arrSubOutput + arrElemLoop ## Append List
+
+ bStart = False
+
+ elif not bStart and arrTrendUpSign[nIndx]:
+ if len(arrSubOutput) > 0:
+ for nCount in range(0, len(arrElemLoop)):
+ if arrElemLoop[nCount] != arrSubOutput[-1]:
+ break
+
+ arrSubOutput = arrSubOutput + arrElemLoop[nCount:] ## Append List
+ else:
+ arrSubOutput = arrSubOutput + arrElemLoop[1:] ## Append List
+
+ elif not bStart and not arrTrendUpSign[nIndx]:
+ if len(arrSubOutput) > 0:
+ arrInterOutput.append(arrSubOutput)
+ arrSubOutput = []
+ arrSubOutput = arrSubOutput + arrElemLoop ## Append List
+ bStart = True
+
+if len(arrSubOutput) > 0:
+ arrInterOutput.append(arrSubOutput)
+ arrSubOutput = []
+
+
+arrFinalOutput = arrInterOutput[0]
+for arrElemLoop in arrInterOutput[1:]:
+ if len(arrElemLoop) > len(arrFinalOutput):
+ arrFinalOutput = arrElemLoop
+
+## print (arrInterOutput)
+print (arrFinalOutput)