日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

334. Increasing Triplet Subsequence

發(fā)布時(shí)間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 334. Increasing Triplet Subsequence 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the array.

Formally the function should:

Return true if there exists?i, j, k?
such that?arr[i]?<?arr[j]?<?arr[k]?given 0 ≤?i?<?j?<?k?≤?n-1 else return false.

Your algorithm should run in O(n) time complexity and O(1) space complexity.

Examples:
Given?
[1, 2, 3, 4, 5],
return?
true.

Given?[5, 4, 3, 2, 1],
return?
false.

Credits:
Special thanks to?@DjangoUnchained?for adding this problem and creating all test cases.

Subscribe?to see which companies asked this question

這道題要求一個(gè)沒(méi)有排序的數(shù)組中是否有3個(gè)數(shù)字滿(mǎn)足前后遞增的關(guān)系。最簡(jiǎn)單的辦法是動(dòng)態(tài)規(guī)劃,設(shè)置一個(gè)數(shù)組dp,dp[i]表示在i位置之前小于或者等于數(shù)字nums[i]的數(shù)字的個(gè)數(shù)。我們首先將數(shù)組dp的每個(gè)元素初始化成1.然后開(kāi)始遍歷數(shù)組,對(duì)當(dāng)前的數(shù)字nums[i],如果存在nums[j]<nums[i] (j<i),那么更新dp[i]=max(dp[i],dp[j]+1).如果在更新dp[i]之后,dp[i]的值為3了,那么就返回true,否則返回false。

代碼如下:

  • class Solution {
  • public:
  • bool increasingTriplet(vector<int>& nums) {
  • vector<int> dp(nums.size(),1);
  • for(int i=0;i<nums.size();i++){
  • for(int j=0;j<i;j++){
  • if(nums[j]<nums[i]){
  • dp[i]=max(dp[i],dp[j]+1);
  • if(dp[i]==3){
  • return true;
  • }
  • }
  • }
  • }
  • return false;
  • }
  • };
  • 上述代碼不滿(mǎn)足題目要求的時(shí)間復(fù)雜度和空間復(fù)雜度。另一種思路是遍歷數(shù)組,維護(hù)一個(gè)第一小值min1與第二小值min2,遍歷數(shù)組,如果nums[i]<=min1,用nums[i]更新min1,否則如果nums[i]<=min2,用nums[i]更新min2,否則只可能nums[i]同時(shí)大于min1與min2,那么說(shuō)明該數(shù)組中能找到長(zhǎng)度為3的遞增子數(shù)組,返回true。如果一直沒(méi)有返回,說(shuō)明不能找到,直接在最后返回false。
  • class Solution {
  • public:
  • bool increasingTriplet(vector<int>& nums) {
  • int min1=INT_MAX;
  • int min2=INT_MAX;
  • for(auto a:nums){
  • if(a<=min1)
  • min1=a;
  • else if(a<=min2)
  • min2=a;
  • else
  • return true;
  • }
  • return false;
  • }
  • };


  • ?



    來(lái)自為知筆記(Wiz)

    轉(zhuǎn)載于:https://www.cnblogs.com/zhoudayang/p/5246148.html

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的334. Increasing Triplet Subsequence的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。