有序陣列 有序鍊錶高效去重

2021-09-26 16:38:37 字數 2684 閱讀 9730

基本原理

第一步:初始化兩個指標,乙個慢指標slow、乙個快指標fast。

第二步:判斷慢指標slow和快指標fast的值是否一致,如不一致,慢指標slow加1、並把快指標fast的值賦值給慢指標slow,然後快指標fast加1。

第三步:繼續掃瞄後面的元素,如果慢指標slow和快指標fast的值一致,說明元素重複,快指標fast直接加1並繼續掃瞄。

第四步:重複第

二、第三步,當快指標fast走到末尾時,去重結束,返回第0位到慢指標slow位置的資料,,即是去重之後的資料。

有序陣列去重**

有序陣列去重原始碼

/**

* 有序陣列去重

* @param nums

* @return

*/public static int arraytoweigh(int nums)

int slow = 0; // 慢指標

int fast = 1; // 快指標

while (fast < nums.length)

fast++; // 快指標加1

}// 把去重之後的資料重新複製成乙個新陣列返回

return arrays.copyofrange(nums, 0, slow + 1);

}

基本原理

同有序陣列去重原理一樣,唯一的區別是把陣列賦值的操作變成了指標操作。

有序鍊錶去重原始碼

第一步:初始化鍊錶結構和測試資料

public class linkedlisttoweigh

}private nodehead;

/** 從頭部新增結點資訊 */

public nodeadd(e e) else

return newnode;

}public nodeinit()

}

第二步:有序鍊錶去重

/**

* 有序鍊錶去重

* @param node

* @return

*/public nodelinkedlisttoweigh(nodenode)

nodeslow = node; // 慢指標

nodefast = node.next; // 快指標

while (fast != null)

fast = fast.next; // 快指標前進1

}// 把鍊錶斷開,相當於把後面的元素拋棄了

slow.next = null;

return node;

}

第三步:main方法測試有序鍊錶去重

public static void main(string args) 

// 有序鍊錶去重之後的資料

nodenode = linkedlist.linkedlisttoweigh(linkedlist.init());

system.out.print("\n有序鍊錶資料去重: ");

while (node != null)

}

列印效果圖:

基本原理:利用hashmap中key不會重複的特性。

第一步:將字串拆分,每乙個字元作為map中的key

第二步:判斷key是否在map中存在,當map中存在key時,value累計加1,當map中不存在key時, value預設為1。

備註:如不需要統計字元個數,還可用hashset中的add方法去重。

字串去重原始碼

/**

* 字串去重,並統計字元個數

* 備註: 利用hashmap中key不會重複的特性

* @param s

* @return

*/public static mapstringtoweigh(string s)

mapmap = new hashmap();

for (int i = 0; i < s.length(); i++) else

}return map;

}// main測試**

遞增有序鍊錶去重

題目 在乙個遞增有序的線性表中,有數值相同的元素存在,若儲存方式為單鏈表,設計演算法去掉數值相同的元素,使表中不再有重複的元素。分析 對於這類去重,我們肯定需要進行遍歷,而這道題給我們的是遞增有序的序列,我們便可以進行一一比較,後乙個元素與當前元素相同 時便刪除當前元素。如下 struct link...

演算法題 有序陣列去重

將有序陣列去重並且列印去重之後的長度。快慢指標思想,邏輯上的指標,並非 這個指標 定義兩個指標slow,fast。fast逐個遍歷元素,如果與slow不同,則把slow所指元素列印出來,如果與slow所指元素相同,則fast 1,直至遍歷結束。include using namespace std ...

陣列並集 有序陣列去重

include include include include include include using namespace std 求兩個陣列的交集 三種方法 1.兩個指標,判斷三個大小 2.兩個map存,另乙個map去找,value 1則說明重複 3.set標準庫自帶函式set union 並...