前言:
各位同學(xué)大家好,現(xiàn)在這段時(shí)間給大家更新算法的一些講解 廢話不多說我們正式開始,希望能幫助到各位的學(xué)習(xí) 工作以及面試
需求
給你一個(gè)整數(shù)數(shù)組 nums 。如果任一值在數(shù)組中出現(xiàn) 至少兩次 ,返回 true ;如果數(shù)組中每個(gè)元素互不相同,返回 false 。
示例
輸入:nums = [1,2,3,1]
輸出:true
具體實(shí)現(xiàn)
第一種 排序
在對(duì)數(shù)字從小到大排序之后,數(shù)組的重復(fù)元素一定出現(xiàn)在相鄰位置中。因此,我們可以掃描已排序的數(shù)組,每次判斷相鄰的兩個(gè)元素是否相等,如果相等則說明存在重復(fù)的元素。
public static boolean containsDuplicate(int[]nums){
Arrays.sort(nums);
int n = nums.length;
for (int i = 0; i < n - 1; i++) {
if (nums[i] == nums[i + 1]) {
return true;
}
}
return false;
}
復(fù)雜度分析
時(shí)間復(fù)雜度:O(N\log N)O(NlogN),其中 NN 為數(shù)組的長(zhǎng)度。需要對(duì)數(shù)組進(jìn)行排序。
空間復(fù)雜度:O(\log N)O(logN),其中 NN 為數(shù)組的長(zhǎng)度。注意我們?cè)谶@里應(yīng)當(dāng)考慮遞歸調(diào)用棧的深度。
我們通過 for循環(huán) 數(shù)組里面的相鄰的2個(gè)元素進(jìn)行數(shù)值對(duì)比 如果相等我們返回true 否則就返回false
測(cè)試一把

方法二
對(duì)于數(shù)組中每個(gè)元素,我們將它插入到哈希表中。如果插入一個(gè)元素時(shí)發(fā)現(xiàn)該元素已經(jīng)存在于哈希表中,則說明存在重復(fù)的元素。
public static boolean containsDuplicate2(int[] nums) {
Set<Integer> set = new HashSet<Integer>();
for (int x : nums) {
if (!set.add(x)) {
return true;
}
}
return false;
}
第二種我們用這個(gè)HashSet集合
-
HashSet 就是一個(gè) HashMap。HashMap的key存放值,value存放Object對(duì)象
-
HashSet 特點(diǎn)是不重復(fù),也正是利用了HashMap的數(shù)據(jù)結(jié)構(gòu)的特點(diǎn),它key是不會(huì)重復(fù)的。如果不理解先看上面的HashMap知識(shí)
所以我們for循環(huán)便利的時(shí)候?qū)⒃瓉頂?shù)組里面每一個(gè)元素添加到我們set里面如果出現(xiàn)重復(fù)的元素就會(huì)返回false
測(cè)試效果 :

## 完整代碼
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/***
*
* 創(chuàng)建人:xuqing
* 創(chuàng)建時(shí)間:2022年6月20日16:47:01
* 類說明:測(cè)試類
*
*
*/
public class onenums {
public static void main(String[] args) {
int[] numbers={1,2,3,1};
Boolean flag=containsDuplicate(numbers);
Boolean flag2=containsDuplicate2(numbers);
System.out.println("方法1");
System.out.println(flag);
System.out.println("方法2");
System.out.println(flag2);
}
public static boolean containsDuplicate(int[]nums){
Arrays.sort(nums);
int n = nums.length;
for (int i = 0; i < n - 1; i++) {
if (nums[i] == nums[i + 1]) {
return true;
}
}
return false;
}
public static boolean containsDuplicate2(int[] nums) {
Set<Integer> set = new HashSet<Integer>();
for (int x : nums) {
if (!set.add(x)) {
return true;
}
}
return false;
}
}
最后總結(jié)
以后會(huì)長(zhǎng)期更新算法文章講解的,主要是希望能幫助到各位網(wǎng)友的基礎(chǔ)學(xué)習(xí)和面試的 最后希望我的文章能幫助到各位解決問題 ,以后我還會(huì)貢獻(xiàn)更多有用的代碼分享給大家。各位同學(xué)如果覺得文章還不錯(cuò) ,麻煩給關(guān)注和star,小弟在這里