兩陣列的問題? delphi / windows sdk/api
問題1:找出兩陣列的不同數和共有數的值和位置,和同值同位置的值存入陣列s1……s9
如:
陣列值r1為
陣列值r2為
需要找出:
陣列值r1不同數的值: s1
陣列值r1不同數的位置: s2
陣列值r2不同數的值: s3
陣列值r2不同數的位置: s4
兩陣列共有數的值: s5
兩陣列共有數r1的位置: s6
兩陣列共有數r1的位置: s7
兩陣列同值同位置的值: s8
兩陣列同值同位置的位置: s9
注意:實際應用中是動態陣列,而且還很大,需要乙個精簡的辦法!!
問題2:把陣列按數值從小到大排列。同上注意!!!
var
r1: array of integer;
r2: array of integer;
sl1: tstringlist;
sl2: tstringlist;
idx: integer;
index: integer;
s1: array of integer;
s2: array of integer;
s3: array of integer;
s4: array of integer;
s5: array of integer;
s6: array of integer;
s7: array of integer;
s8: array of integer;
s9: array of integer;
begin
setlength(r1, 10);
setlength(r2, 9);
r1[0] := 1;
r1[1] := 6;
r1[2] := 23;
r1[3] := 15;
r1[4] := 5;
r1[5] := 28;
r1[6] := 8;
r1[7] := 11;
r1[8] := 10;
r1[9] := 19;
r2[0] := 2;
r2[1] := 23;
r2[2] := 4;
r2[3] := 15;
r2[4] := 5;
r2[5] := 17;
r2[6] := 12;
r2[7] := 11;
r2[8] := 3;
sl1 := tstringlist.create;
sl2 := tstringlist.create;
//'%.8d'的目的有2個,
//其一是排序, 其二是滿足大資料
for idx := low(r1) to high(r1) do
sl1.add(format('%.8d', [r1[idx]]));
for idx := low(r2) to high(r2) do
sl2.add(format('%.8d', [r2[idx]]));
//為了顯示方便,我用了listbox.
//在你的實際程式中你可以用tstringlist來代替.
listbox1.sorted := true;
listbox2.sorted := true;
listbox3.sorted := true;
listbox4.sorted := true;
listbox5.sorted := true;
listbox6.sorted := true;
listbox7.sorted := true;
listbox8.sorted := true;
listbox9.sorted := true;
for idx := 0 to pred(sl1.count) do
begin
index := sl2.indexof(sl1[idx]);
if index < 0 then
begin
listbox1.items.add(sl1[idx]);
listbox2.items.add(format('%.8d', [idx]));
end else
begin
listbox5.items.add(sl1[idx]);
listbox6.items.add(format('%.8d', [idx]));
listbox7.items.add(format('%.8d', [index]));
if idx = index then
begin
listbox8.items.add(sl1[idx]);
listbox9.items.add(format('%.8d', [idx]));
end;
end;
end;
for idx := 0 to pred(sl2.count) do
begin
if sl1.indexof(sl2[idx]) < 0 then
begin
listbox3.items.add(sl2[idx]);
listbox4.items.add(format('%.8d', [idx]));
end;
end;
//剩下的工作就是把listbox ---> s陣列,
//我只寫乙個,其餘的照葫蘆畫瓢}
setlength(s1, listbox1.items.count);
for idx := 0 to pred(listbox1.items.count) do
s1[idx] := strtoint(listbox1.items[idx]);
//上面演算法的前提
//1、是每個陣列自身沒有重複數
//2. r1的長度大於等於r2的長度
//如要滿足任何條件,演算法基本沒有大的變化, 只是多了乙個遍歷
end;
兩陣列的交 和 兩陣列的交
題目描述 計算兩個陣列的交 解題思路 這兩個題我放在一起了,只要會兩個陣列的交就行了,兩個陣列的交 幾乎一樣,就是刪了一點 先分別對兩個陣列排序,然後分別比較兩個陣列的元素,如果有相同的元素插入到新的陣列裡,將這個數儲存起來,用於後面去掉重的元素,如果兩個元素不一樣,繼續比較剩下的元素。兩個陣列的交...
兩陣列的交
返回兩個陣列的交 樣例nums1 1,2,2,1 nums2 2,2 返回 2 先排序,從nums1陣列中取數判斷時,若nums1 i nums2 j 才繼續遍歷nums2,並用乙個k值記錄nums2中比nums1 i 1 小的最大數的角標,下次判斷nums i 時nums2從k值開始取。class...
兩陣列的交
一 問題描述 返回兩個陣列的交 注意事項 樣例nums1 1,2,2,1 nums2 2,2 返回 2 二 解題思路運用set intersection函式很容易求出兩陣列的交集,要注意使用這個函式時引數怎麼樣寫,還有就是inserter函式,要注意裡面的引數,第乙個是要插入的內容,第二個是插入的位...