给定一个整数数组 arr,您的任务是计算表示至少两个元素的锯齿序列的连续子数组的数量。
\n对于 arr = [9, 8, 7, 6, 5],输出应为 countSawSubarrays(arr) = 4。由于所有元素均按降序排列,因此 \xe2\x80\x99 不可能形成任何锯齿波长度为 3 或以上的子数组。有 4 个可能的子数组包含两个元素,因此答案是 4。
\n对于 arr = [10, 10, 10],输出应为 countSawSubarrays(arr) = 0。由于所有元素都相等,因此没有任何子数组可以是锯齿形的,因此答案为 0。
\n对于 arr = [1, 2, 1, 2, 1],输出应为 countSawSubarrays(arr) = 10。
\n所有包含至少两个元素的连续子数组都满足问题的条件。有 10 个可能的连续子数组包含至少两个元素,因此答案是 10。
\n解决这个问题的最佳方法是什么?我在这里看到了一个可能的解决方案:https ://medium.com/swlh/sawtooth-sequence-java-solution-460bd92c064
\n但这段代码对于 [1,2,1,3,4,-2] 的情况失败了,其中答案应该是 9,但结果却是 12。
\n我什至尝试过暴力方法,但我无法理解它。任何帮助,将不胜感激!
\n编辑: \n感谢 Vishal 的回复,经过一些调整,这里是 python 中的更新解决方案。\n时间复杂度:O(n)\n空间复杂度:O(1)
\ndef samesign(a,b):\n if a/abs(a) == b/abs(b):\n return True\n else:\n return False\n\ndef …Run Code Online (Sandbox Code Playgroud)