Python 提取阵列中的向上/向下趋势
我有一个由不同日子的温度组成的数组。我的目标是提取温度在n天内升高或降低的元素 假设我们有一个由以下温度组成的数组Python 提取阵列中的向上/向下趋势,python,arrays,trend,Python,Arrays,Trend,我有一个由不同日子的温度组成的数组。我的目标是提取温度在n天内升高或降低的元素 假设我们有一个由以下温度组成的数组 temp=[4,5,7,8,9,7,6,7,8,6,5,4,3,2] 如果我们假设n=3,那么如果温度连续升高了两天,但在第三天减少,我们不想提取该信息,只考虑在一个行中的最小温度N的温度HAV增加/减少的元素。 假设n=3,那么从上面的临时数组中提取 increasingTemp1=[4,5,7,8,9] ( i.e temp[0:5] ) increasingTemp2=[6
temp=[4,5,7,8,9,7,6,7,8,6,5,4,3,2]
如果我们假设n=3,那么如果温度连续升高了两天,但在第三天减少,我们不想提取该信息,只考虑在一个行中的最小温度N的温度HAV增加/减少的元素。 假设n=3,那么从上面的临时数组中提取
increasingTemp1=[4,5,7,8,9] ( i.e temp[0:5] )
increasingTemp2=[6,7,8] ( i.e temp[6:9] )
decreasingTemp1=[9,7,6] ( i.e temp[4:7] )
decreasingTemp2=[8,6,5,3,2] ( i.e temp[8:] )
有没有办法做到这一点
谢谢我猜这是一个典型的LeetCode数组问题。我将遍历数组一次,并为每个递增/递减数字序列建立子数组。如果趋势的方向发生变化,我将检查子阵列的长度是否至少为n,然后将子阵列添加到递增/递减阵列列表中 一个实现可以是这样的(O(n)时间和内存)
我希望这有帮助。如果您想确保实现是正确的,您可能需要创建和检查更多的测试用例 我已经在更多的测试用例上试用过了,到目前为止效果很好。感谢您花时间提供此解决方案
def return_arrays(arr,n):
increasing = []
decreasing = []
new_arr = []
for i,elem in enumerate(arr):
if len(new_arr)>1:
if new_arr[0]-new_arr[-1]>=0:
# Decreasing
if new_arr[-1]>=elem:
new_arr.append(elem)
else:
if len(new_arr)>=n:
decreasing.append(new_arr)
new_arr = [new_arr[-1],elem]
else:
# Increasing
if new_arr[-1]<=elem:
new_arr.append(elem)
else:
if len(new_arr)>=n:
increasing.append(new_arr)
new_arr = [new_arr[-1],elem]
else:
new_arr.append(elem)
if i==len(arr)-1:
if len(new_arr)>=n:
if new_arr[0]-new_arr[-1]>=0:
decreasing.append(new_arr)
else:
increasing.append(new_arr)
return increasing,decreasing
temp = [4,5,7,8,9,7,6,7,8,6,5,4,3,2]
return_arrays(temp,3) # ([[4, 5, 7, 8, 9], [6, 7, 8]], [[9, 7, 6], [8, 6, 5, 4, 3, 2]])