分治演算法 work2 2 14 刪除相同元素

2021-09-24 02:02:52 字數 1157 閱讀 5427

題目:

演算法思路:基本思想是歸併排序的思想,細節上有差異。

在進行兩個有序陣列合併的時候,查詢重複的字元,如果重複,其中乙個指標移動,乙個數隻存一次,由於陣列的長度發生了變化 ,需要返回刪除重複字元後的陣列最右邊界,陣列在合併時只對左右邊界內的資料進行處理 。

時間複雜度o(nlogn)

int remove(int a, int b, int l, int lm, int rm, int r)   //l前半段的左邊界,lm前半段的右邊界 ,

else if (a[i] > a[j])

else

}while (i <= lm)

while (j <= r)

for (i = l; i < k; i++) //陣列複製

return k - 1; //返回合併後的右邊界

}int removeall(int a, int b, int l, int r) //劃分->遞迴->合併

return r;

}int main()

; int b[12];

int r = removeall(a, b, 0, 9);

for (int i = 0; i <= r; i++)

return 0;

}

方法一 (分治法)

類似於歸併排序的遞迴方法,但在combine階段合併兩個有序子串行的merge操作中,同時還刪除重複的元素,即對分別位於兩個子串行中相等的元素只保留乙個。merge演算法的時間複雜度仍為o

(n)。演算法的總體複雜度為o

(nlogn)。

方法二

首先採用乙個o

(nlogn)複雜度的排序演算法對陣列進行排序;然後在陣列元素有序的基礎上,可以使用乙個o

(n)複雜度的演算法刪除陣列中的重複元素。演算法的總體複雜度為o

(nlogn)。

演算法分析與設計 work1

給出由 n 個點,m 條邊構成的一幅無向圖,分別用prim演算法和kruskal演算法構造一棵最小生成樹。prim演算法 從任意乙個頂點開始生成最小生成樹,每次選擇和當前已經構成的樹的最小邊,把最小邊連線的頂點加入到樹中,直到所有頂點都被加入。圖示 kruskal演算法 先對所有邊按公升序進行排序,...

演算法 分治演算法

分治策略主要利用遞迴來解決問題,它包括以下三個步驟 分解 將問題分解為一與原問題類似並且比原問題規模更小的子問題 解決 當分解的子問題足夠小時,直接給出答案,否則用遞迴打方式求解 合併 將子問題的解合成原問題的解 下面考慮乙個簡單的利用分治演算法的歸併排序的例子 問題的形式化描述如下 輸入 a是 乙...

演算法 分治演算法

leetcode 169.多數元素 應用舉例 通過應用舉例分析理解分治演算法的原理其實並不難,但是要想靈活應用並在程式設計中體現這種思想中 卻並不容易。所以,這裡這裡用分治演算法應用在排序的時候的乙個栗子,加深對分治演算法的理解。相關概念 一般通過計算有序對或者逆序對的個數,來表示資料的有序度或逆序...