天池在线编程 2020国庆八天乐 - 6. 山谷序列(DP)
生活随笔
收集整理的這篇文章主要介紹了
天池在线编程 2020国庆八天乐 - 6. 山谷序列(DP)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
https://tianchi.aliyun.com/oj/118289365933779217/122647324212270018
描述:
給你一個長度為 n 的序列,在他的子序列中讓你找一個山谷序列,山谷序列定義為:
- 序列的長度為偶數。
- 假設子序列的長度為 2n 。則前 n 個數是嚴格遞減的,后 n 個數是嚴格遞增的,并且第一段的最后一個元素和第二段的第一個元素相同,也是這段序列中的最小值。
現在想讓你找所有子序列中滿足山谷序列規則的最長的長度為多少?
示例 樣例 1:輸入: num = [5,4,3,2,1,2,3,4,5]輸出: 8樣例解釋: 最長山谷序列為[5,4,3,2,2,3,4,5]樣例 2:輸入: num = [1,2,3,4,5]輸出: 0樣例解釋: 不存在山谷序列2. 解題
class Solution { public:/*** @param num: sequence* @return: The longest valley sequence*/int valley(vector<int> &num) {// write your code hereint n = num.size();if(n <= 1) return 0;vector<int> up(n, 1), down(n, 1);//最長遞增/遞減數組for(int i = 1, j; i < n; i++) //正序{for(j = 0; j < i; j++){if(num[j] > num[i])//前面的比當前大,遞減down[i] = max(down[i], down[j] + 1);}}for(int i = n-2, j; i >= 0; i--) //逆序遍歷{for(j = i+1; j < n; j++){if(num[j] > num[i])//后面的比當前大,遞增up[i] = max(up[i], up[j] + 1);}}int maxlen = 0;for(int i = 0, j; i < n; i++){for(j = i+1; j < n; j++){if(num[i] == num[j])//最小的數{maxlen = max(maxlen, min(down[i],up[j])*2);} // 兩側等長的遞減 遞增}}return maxlen;} };時間復雜度 O(n2)O(n^2)O(n2)
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的天池在线编程 2020国庆八天乐 - 6. 山谷序列(DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1626. 无矛盾的最
- 下一篇: LeetCode 1578. 避免重复字