演算法實現
有兩個序列a,b,大小都為n,序列元素的值任意整數,無序;
要求:通過交換a,b 中的元素,使[序列a 元素的和]與[序列b 元素的和]之間的差最小。
var a=[100,99,98,1,2, 3];
var b=[1, 2, 3, 4,5,40];
題目來自july大神的 微軟公司等資料結構+演算法面試100題(第1-100題)全部出爐
在此寫下自己的實現
#include
#include
#include
#include
using
namespace
std;
int main()
for(i = 0;icin>>j;
v2.push_back(j);
s2 += j;
}//將s1設定為和為大的那個集合
if(s1//排序為了二分查詢
sort(v1.begin(),v1.end());
sort(v2.begin(),v2.end());
low = 0;
high = v2.size()-1;
count=0;
a = s1-s2; //a 中存放當前兩個集合的差值
while(min!=a)
}//若有恰好等於tmp值的,無需再找,直接得到更新兩個集合
if(min == 0)
//選擇最合適的那個元素對應的下標
if(low!=v2.size()-1&&low!=0)
if(abs(tmp - v2[low])>abs(tmp-v2[low-1])
&& abs(tmp - v2[low+1])>abs(tmp-v2[low-1]))
low = low-1;
}//更新min值,並記錄下標
if(v1[i]-v2[low]>0 && v1[i]-v2[low]if(min>abs(tmp - v2[low]))
}//以下為交換當前最合適的兩元素
if(mincontinue;}}
//列印結果
for(i = 0;icout
<" ";
}cout
<" ";
}cout
0; }
801 使序列遞增的最小交換次數
我們有兩個長度相等且不為空的整型陣列 a 和 b 我們可以交換 a i 和 b i 的元素。注意這兩個元素在各自的序列中應該處於相同的位置。在交換過一些元素之後,陣列 a 和 b 都應該是嚴格遞增的 陣列嚴格遞增的條件僅為a 0 a 1 a 2 a a.length 1 給定陣列 a 和 b 請返回...
LeetCode 使序列遞增的最小交換(動態規劃)
我們有兩個長度相等且不為空的整型陣列 a 和 b 我們可以交換 a i 和 b i 的元素。注意這兩個元素在各自的序列中應該處於相同的位置。在交換過一些元素之後,陣列 a 和 b 都應該是嚴格遞增的 陣列嚴格遞增的條件僅為a 0 a 1 a 2 a a.length 1 給定陣列 a 和 b 請返回...
801 使序列遞增的最小交換次數
我們有兩個長度相等且不為空的整型陣列 nums1 和 nums2 在一次操作中,我們可以交換 nums1 i 和 nums2 i 的元素。例如,如果 nums1 1,2,3,8 nums2 5,6,7,4 你可以交換 i 3 處的元素,得到 nums1 1,2,3,4 和 nums2 5,6,7,8...