Huawei社フェイス質問パイソン(オリジナル)

最近、この問題を見ることが起こりました。

二つの配列、bがあり、任意の値の大きさは、整数N、配列要素、順不同です。

最小の差を交換することにより、素子のB、[元素及び配列]および[Bと配列要素】よううち:要件

いくつかの審議の後、私は、問題と、次のことを考えを解決するためにブルートフォースメソッドを使用しようとしました:

図1に示すように、それぞれ、A、B、および配列sum_aの要素、sum_b検索
2を算出分= ABS(sum_a - sum_b)

図3は、トラバースのn×n個:交換、bは任意の要素であり、各交換は、二次元配列Tの要素として、(A)-sum(B)の絶対値和を算出した交換後。

前記和(A)-sum(B) = sum_a - [I] + B [J] - (sum_b + [I] -b [J])= sum_a -sum_b + 2 *(B [J] -a [I])
4、他のmin_tの=さt [0] [0 ]、 次にT-シーケンスを反復:新しい値min_tとしてTを持つ要素、要素のmin_t> Tの場合は

5分及びmin_tの大きさを決定する:min_tは分<場合は、その後、Bはスイッチング素子ない;逆に、ありません。

すなわち、最終的な出力シーケンスは、要件を満たすためです。

コードは以下の通りであります:

******穷举法****** Python3.5 ****** 
インポートランダム
 デフ random_int_list(開始、停止、長さ):   产生随机序列 
    開始、=(INTを停止し()開始、INT(停止))場合、開始<=ストップ(INT(停止)、INT(開始))
    長さ = INT(ABS(長さ))であれば長さが0 
    random_list = []
     のための I における範囲(長さ):
        random_list。 (random.randint(停止、開始))追加
    リターンrandom_list 

A = random_int_list(1,100,5 
B = random_int_list(1,100,5
T = [0 用の I における範囲(5)] のための I における範囲(5)] #の初期化シーケンス次元Tの
印刷' A = '、A、' B = '、B、' T = ' 、T )
sum_a = SUM(A)
sum_b = SUM(B) = ABS(sum_a - sum_b)
 プリント' sum_a = '、sum_a、' sum_b = '、sum_b、' 分= ' 、分)
印刷" =============================================== ' 

のための I における範囲(5 のための J における範囲(5 ):
        T [I] [J] = ABS(sum_a -sum_b + 2 *(B [J] - [I]))
 プリント' T = 'T)
 の印刷' ========================================== ===== ' 
min_t = T [0] [0]
 のための I における範囲(5 のための J における範囲(5
場合(> min_t T [I] [J]):
            min_t = T [I] [J] 
            TEMP1 = iが
            TEMP2 = jで
 あれば分> min_t:
    TEMP = [TEMP1] 
    [TEMP1] =のB [TEMP2] 
    B [TEMP2] = 一時
 プリント' A = '' B = '、B)

Pythonの顔の質問の大規模なコレクション

 

おすすめ

転載: www.cnblogs.com/pythongood/p/11223677.html