1. 程式人生 > >有兩個序列a,b,大小都為n,序列元素的值任意整形數,無序; 要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。

有兩個序列a,b,大小都為n,序列元素的值任意整形數,無序; 要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。

整體思想是利用兩個列表和的差值絕對值大小判斷是否互動兩個列表的值

#!/usr/bin/env python

# coding=utf-8
def abs_test(a,b):
    # 假設剛開始就是差值最小的
    # 此時的差值絕對值為:
    min = abs(sum(a)-sum(b))
    # x,y分別為a,b列表的下標值
    x=y=0
    # 當a的下標小於a的長度時,依次用b的每一個值和a的值交換
    # 比較他們的差值絕對值的大小
    while x<len(a):
        #依次用b的每一個值和當前a的值交換
        while y<len(b):
            a[x],b[y] = b[y],a[x]
            # 交換後2個列表的差值絕對值
            tmp = abs(sum(a)-sum(b))
            # 如果此時的差值小,則賦值給min
            # 否則還將交換回去
            if min>tmp:
                min = tmp
            else:
                a[x],b[y] = b[y],a[x]
            y += 1
        x += 1
        y = 0
    return a,b


a = [1000, 999, 998, 997, 996, 995]
b = [994, 993, 992, 3, 2, 1]
val = abs_test(a,b)

print(val)

原文連結:http://blog.51cto.com/myunix/1331612

相關推薦

[微軟]序列a,b大小n,序列元素任意整數無序 要求通過交換a,b元素使[序列a元素][序列b元素]之間_利用排列組合思路解決_python版

+= 求和 ever tro 解決 turn 運行 main lis (原題出自微軟公司面試題)問題如下:有兩個序列a,b,大小都為n,序列元素的值任意整數,無序;要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。例如:a=[100,99,

序列a,b大小n,序列元素任意整數無序要求通過交換a,b元素使[序列a元素

原題:有一序列a,大小為n,分為2部分,序列元素的值任意整形數,無序; 要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小,用python寫。 #coding=ut

序列a,b大小n,序列元素任意整形無序 要求通過交換a,b元素使[序列a元素][序列b元素]之間

整體思想是利用兩個列表和的差值絕對值大小判斷是否互動兩個列表的值#!/usr/bin/env python# coding=utf-8def abs_test(a,b):    # 假設剛開始就是差值最小的    # 此時的差值絕對值為:    min = abs(sum(a

面試題(8分鐘寫出程式碼) 陣列a,b大小n,陣列元素任意無序 要求通過交換a,b元素使陣列a元素陣列b元素之間

先上程式碼 java程式碼: public class MinDiff { public static void main(String[] args){ int[] aa={2,5,4,3,1,0}; int[] bb={7,9,8,10,6,11}

Python 經典面試題: a,b序列,大小n,序列元素任意整形,無序, 要求: 通過交換a,b元素,使[序列a元素][序列b元素]之間 使

方法: 用隨機數來求出結果 解題思想: 用隨機數隨機出來所有的程式碼排列可能性,在定義次數的時候 定義的次數越大得到的結果越準確. 最終程式碼: import random #有很多方法是把兩個列表合成一個後排序按照一大一小的分配生成兩個列表 #但是這樣是在資

演算法二十二陣列之間

有兩個序列a,b,大小都為n,序列元素的值任意整數,無序; 要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。 例如:  var a=[100,99,98,1,2, 3]; var b=[1, 2, 3, 4,5,40]; 分析:要是序

python面試題通過交換a,b元素使[序列a][序列b]之間

    sumb = sum(lstb)     d = abs(suma-sumb)     if d == 0:         return d          bExchange = False         for indexa, ia in enumerate(lsta):         i

【資料結構 C描述】整數集合 A B 分別用線性表 LA LB 表示一個新的集合AABA仍然純集合線性表採用鏈式儲存方式【單鏈表】

這是我的作業題,作業寫完後再附到部落格中,可能程式碼寫得很爛。雖然是C語言寫的,但是我在其中加入了C++的寫法,例如cout。我懶得寫printf的格式控制符,所以用cout來輸出內容,這樣我感覺簡便多了 題目 假設:有兩個整數集合 A 和 B 分別用兩個線性表

磁碟檔案AB,各存放一行字母要求把這檔案的資訊合併(按字母順序排列)

#include "stdio.h" main() { FILE *fp; int i,j,n,ni; char c[160],t,ch; if((fp=fopen("A","r"))==NULL) {printf("file A cannot be open

一個類方法其中一個是同步的另一個是非同步的 現在又執行緒AB請問當執行緒A訪問此類的同步方法時執行緒B是否能訪問此類的非同步方法?

一個類有兩個方法,其中一個是同步的,另一個是非同步的;現在又兩個執行緒A和B,請問:當執行緒A訪問此類的同步方法時,執行緒B是否能訪問此類的非同步方法? 答案:可以 驗證 package com.my.test2; public class ClassA { public syn

雅虎面試題─雙向迴圈連結串列AB知道其頭指標pHeadA,pHeadB請寫一函式將連結串列data相同的結點刪除

有雙向迴圈連結串列結點定義為: struct node {    int data;   struct node *front,*next; }; 有兩個雙向迴圈連結串列A,B,知道其頭指標為:pHeadA,pHeadB,請寫一函式將兩連結串列中data值相同的結點刪

一個整數陣列元素只出現一次其他所有元素均出現 找出只出現一次的那元素(java實現)

一個整數陣列中,有兩個元素只出現一次,其他所有元素均出現兩次。 找出只出現一次的那兩個元素。 思路大概是這樣的:因為除了這兩個只出現一次的數字外,其餘都是成對出現的,有一種運算子,異或運算,兩個相同的數字異或之後為0,所以將陣列中所有的數字依次異或,結果就是這個兩個支出現一

元組(('a'),('b')),(('c'),('d')),請生成[{'a':'c'},{'b':'d'}]格式

解這道題的方法很多,僅於此與大家共勉。 方式一: tup1=(('a'),('b')) tup2=(('c'),('d')) ret=zip(tup1,tup2) def func(tup): return {tup[0]:tup[1]} lst=[] ret2=map(func,r

有序陣列A[k]B[k]長度k求前k的(a[i]+b[j])

設A={A1,A2,A3,A4,A5,A6,.......} ,B={B1,B2,B3,B4,B5,B6,.......} 因為A和B都是有序的陣列,必須充分的利用這點,可能有同學,看到有同學覺得這個題目比較容易,直接將所有的組合都計算出來,然後取最小的K個,其實出題的人是

給定一個target陣列是否元素target

轉載:https://blog.csdn.net/u010515761/article/details/43451035題目:編寫一個函式,輸入為一個int型的陣列numbers和一個int型變數target,找到這個陣列中和為target的兩個元素,輸出其index。假設每

如何用純CSS將圖片填滿div自適應容器大小不太完善的方案

我有一個模板,想按常規做一個div裡面放置一個img圖片,並且讓圖片鋪滿容器,自適應容器大小。HTML結構程式碼如下(在這個盒模型上,我已經放置了一些不重要的樣式)。<div style="height:270px;width:400px;border:2px blac

mysqlmariadb字段拼接類型或多字段或者一個字段一個固定字符串拼接

str1 from 連接 字符串連接 一個 cat str 拼接 str2 MySQL中concat函數 CONCAT(str1,str2,…) 1 .兩個或多個字段連接 例:字段 a,b 表 tb1 語句: select conca

SDUT 3503 正整數N!的K進制的位數

pos class 進制 amp code cpp ref clu lan 有兩個正整數,求N!的K進制的位數 題目鏈接:action=showproblem&problemid=3503">http://sdutacm.org/sdutoj/prob

遞增的有序連結串列合併一個遞增的有序連結串列要求結果連結串列扔使用原來連結串列的儲存空間不另外佔用其他的儲存空間不允許重複的資料

語言:C++ #include <iostream> using namespace std; typedef struct LNode { int data; LNode *next; }LNode,*LinkList; //建立連結串列 int CreateList(Li

php一個表單提交按鈕分別對應不同的處理頁面

通過隱藏表單hidden的屬性值應該可以解決 <form action="test.php" name='theForm'> <input type'hidden' name='act'> <input type="submit" name="ret