最小部分配列順序の長さが必要

質問の意味:そのような[1,4,6,5,9,10]として配列、与えられた、小さなから大きな順に6,5ならば、我々は、順序付けられたシーケンスを得ることができ、これは、ソートに最低限必要です単位長さは2です。

 

あなたがしたい場合の一般的なアプローチで、この問題は非常に複雑です。

次に、各要素ARRから(大に小さいと仮定して)アレイを注文した場合、[I] <= ARR [I + 1]、又はそうマックス{ARR [1]:の性質の以下の記述ことに注意してくださいARR [2]、...、ARR [I]} <= ARR [I + 1];点と、MAX {ARR [1]、ARR [2]、...、ARR [I]} <= ARR [I + 1] <=分{ARR [I + 2]、ARR [I + 3]、... ARR [N]};次に、点の位置は、通常ポイントと呼ばれ、右側に配置されなければなりません、さもなければ順序のアウト点として知られているが、それはまだ間隔で順不同であってもよいです。

だから、私たちは、その後、あなたができる長さを計算、順不同で左端と右端のポイントを見つける必要があります。

 

ヒント:あなたは、大きなまたは大規模から小規模かつ秩序に小さなから注文通知しない場合は、あなたが考慮する必要があります。

 

1  // ここでだけ大と小の場合を考える
2  
。3  INT GetNonSortMinLen(ベクトル< INT > V){
 4。     IF(v.size()<= 1 ){
 5。         復帰 0 ;
 6      }    
 。7      int型 tmp_min = V [ 0 ] ;
 8。     INT TMP_MAX = V [v.size() - 1 ];
 9。     INT min_idx = 0 ;
 10      INT max_idx = v.size() - 1 ;
 11。     ためのINT I = 1 ; I <v.size()。 ++ I ){
12          であれば(V [i]が> = tmp_min){
 13              tmp_min = V [i]は、
14          }
 15          {
 16              min_idx = I。
17          }
 18      }
 19      のためにINT I = v.size() - 2 ; I> - 1 ; i-- ){
 20          であれば(V [i]が<= TMP_MAX){
 21              TMP_MAX = V [i]は、
22          }
 23          {
 24              max_idx = I。
25          }
26      }
 27      であれば(MIN == 0 ){
 28          リターン 0 29      }
 30      リターン min_idx-max_idx + 1 31 }

 

おすすめ

転載: www.cnblogs.com/yy-1046741080/p/12353178.html