Java實(shí)現(xiàn)刪除排序數(shù)組中重復(fù)元素的方法小結(jié)【三種方法比較】
本文實(shí)例講述了Java實(shí)現(xiàn)刪除排序數(shù)組中重復(fù)元素的方法。分享給大家供大家參考,具體如下:
題目描述:
給定一個排序數(shù)組,在原數(shù)組中刪除重復(fù)出現(xiàn)的數(shù)字,使得每個元素只出現(xiàn)一次,并且返回新的數(shù)組的長度。
不要使用額外的數(shù)組空間,必須在原地沒有額外空間的條件下完成。
一:通過ArrayList解決
時間復(fù)雜度和空間復(fù)雜度都為O(n)
ArrayList<Integer> list = new ArrayList<Integer>();
// 去掉數(shù)組中重復(fù)的元素
public int removeTheagain01(int[] array) {
if (array == null || array.length == 0) {
return 0;
} else if (array.length == 1) {
return 1;
} else {
int i = 0;
int n = array.length - 1;
while (i <= n) {
if (i == n) {
list.add(array[i]);
i++;
} else {
int j = i + 1;
if (array[i] == array[j]) {
while (j <= n && array[i] == array[j]) {
j++;
}
}
list.add(array[i]);
i = j;
}
}
for (int k = 0; k < list.size(); k++) {
array[k] = list.get(k);
}
return list.size();
}
}
二:利用System.arraycopy()函數(shù)來復(fù)制數(shù)組
時間復(fù)雜度為O(n^2),空間復(fù)雜度為O(n)
public int removeTheagain02(int[] array) {
if (array == null || array.length == 0) {
return 0;
} else if (array.length == 1) {
return 1;
} else {
int end = array.length - 1;
for (int i = 0; i <= end; i++) {
if (i < end) {
int j = i + 1;
if (array[i] == array[j]) {
while (j <= end && array[i] == array[j]) {
j++;
}
}
System.arraycopy(array, j, array, i + 1, end - j + 1);
end -= j - i - 1;
}
}
return end + 1;
}
}
三:借助臨時變量解決問題
時間復(fù)雜度O(N),空間復(fù)雜度O(1)
public int removeTheagain03(int[] array) {
if (array == null || array.length == 0) {
return 0;
} else if (array.length == 1) {
return 1;
} else {
int temp = array[0];
int len = 1;
for (int i = 1; i < array.length; i++) {
if (temp == array[i]) {
continue;
} else {
temp = array[i];
array[len] = array[i];
len++;
}
}
return len;
}
}
總結(jié):
數(shù)組下標(biāo)(指針)與臨時變量,是解決數(shù)組相關(guān)面試題的兩大法寶**
PS:本站還有兩款比較簡單實(shí)用的在線文本去重復(fù)工具,推薦給大家使用:
在線去除重復(fù)項(xiàng)工具:
http://tools.jb51.net/code/quchong
在線文本去重復(fù)工具:
http://tools.jb51.net/aideddesign/txt_quchong
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)組操作技巧總結(jié)》、《Java字符與字符串操作技巧總結(jié)》、《Java數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》及《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
springboot項(xiàng)目或其他項(xiàng)目使用@Test測試項(xiàng)目接口配置
這篇文章主要介紹了springboot項(xiàng)目或其他項(xiàng)目使用@Test測試項(xiàng)目接口配置,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
Java?String類和StringBuffer類的區(qū)別介紹
這篇文章主要介紹了Java?String類和StringBuffer類的區(qū)別,?關(guān)于java的字符串處理我們一般使用String類和StringBuffer類有什么不同呢,下面我們一起來看看詳細(xì)介紹吧2022-03-03
Java 自定義Spring框架與Spring IoC相關(guān)接口分析
Spring框架是由于軟件開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限于服務(wù)器端的開發(fā)2021-10-10
spring boot如何實(shí)現(xiàn)切割分片上傳
這篇文章主要介紹了spring boot如何實(shí)現(xiàn)切割分片上傳,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12
MyBatis-Plus多數(shù)據(jù)源的示例代碼
本文主要介紹了MyBatis-Plus多數(shù)據(jù)源的示例代碼,包括依賴配置、數(shù)據(jù)源配置、Mapper 和 Service 的定義,具有一定的參考價值,感興趣的可以了解一下2024-05-05

