牛牛的數列

2022-07-19 04:09:13 字數 1150 閱讀 9204

牛牛現在有乙個n個數組成的數列,牛牛現在想取乙個連續的子串行,並且這個子串行還必須得滿足:

最多隻改變乙個數,就可以使得這個連續的子串行是乙個嚴格上公升的子串行,牛牛想知道這個連續子串行最長的長度是多少。

輸入描述:

輸入包括兩行,第一行包括乙個整數n(1 ≤ n ≤ 10^5),即數列的長度;

第二行n個整數a_i, 表示數列中的每個數(1 ≤ a_i ≤ 10^9),以空格分割。

輸出描述:

輸出乙個整數,表示最長的長度。

示例1輸入:

6 7 2 3 1 5 6

輸出:5

解題思路:

正著列舉記錄一下當前位置的連續上公升子串行長度,倒著也做一遍。

最後列舉乙個連線點即可。

1)對於每一位置i 正向記錄到i遞增的長度pre[i] (如果a[i]>a[i-1] 則pre[i] = pre[i-1] + 1否則等於1)

2)對於每一位置i 反向記錄到i遞減的長度suf[i] (如果a[i]=2 證明a[i]可替換 然後計算ans 和pre[i-1] + suf[i+1] +1中的最大值

注意a[0] a[n+1] 均定義最大值,使得在比較時不會越界且不影響處理結果

nums=[7, 2, 3, 1, 5, 6]

def solver(nums):

nums = [float('inf')] + nums + [-float('inf')]

print(nums)

pre = [0] * len(nums)

for i in range(len(nums)):

if i == 0:

pre[i] = 1

elif nums[i] > nums[i-1]:

pre[i] = pre[i-1]+1

else:

pre[i] = 1

suf = [0] * len(nums)

for i in range(len(nums)-1,-1,-1):

if i==len(nums)-1:

suf[i] = 1

elif nums[i]=2:

ans = max(ans, pre[i-1]+suf[i+1]+1)

return ans

牛牛的數列

輸入描述 輸入的第一行為乙個正整數n 1 n 10 5 第二行包括n個整數a i 1 a i 10 9 表示陣列a的每個數字。輸出描述 輸出乙個整數表示牛牛可以將a最少劃分為多少段排序子串行輸入例子 6 1 2 3 2 2 1輸出例子 2 這道題的基本思想 定義兩個指標begin end,分別指向陣...

牛客 牛牛的數列

鏈結 牛牛的數列 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 牛牛現在有乙個n個數組成的數列,牛牛現在想取乙個連續的子串行,並且這個子串行還必須得滿足 最多隻改變乙個數,就可以使得這個連續的子串行是乙個嚴格上公升...

牛客網 牛牛的數列

題目描述 牛牛現在有乙個n個數組成的數列,牛牛現在想取乙個連續的子串行,並且這個子串行還必須得滿足 最多隻改變乙個數,就可以使得這個連續的子串行是乙個嚴格上公升的子串行,牛牛想知道這個連續子串行最長的長度是多少。一開始看到這個題,總是被繞進 改變乙個數 中,就想說是不是遍歷陣列,然後每個數都嘗試改變...