基本原理:
第一步:初始化兩個指標,乙個慢指標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 並...