LeetCode(初級演算法)陣列篇---存在重複
阿新 • • 發佈:2019-01-07
題目
給定一個整數陣列,判斷是否存在重複元素。
如果任何值在陣列中出現至少兩次,函式應該返回 true。如果每個元素都不相同,則返回 false。
解析
在這道題裡,我推薦大家使用兩種方法。我的解題方式是能怎麼簡單就怎麼簡單,不追求到效率的極致,在力求不把問題複雜化
方法一
先排序,後在遍歷陣列時每次與下一個做比較,若存在相等則存在重複
public class Solution {
public boolean containsDuplicate(int[] nums) {
Arrays.sort(nums);
for(int i = 0; i < nums.length-1; i++) {
if(nums[i] == nums[i+1]) {
return true;
}
}
return false;
}
}
方法二
利用HashSet的唯一性,在每次新增的時候檢查返回值來進行判斷
- 為什麼要用這種方法?
雖然效率上和空間上都沒有上面的方法好,但是這種可以適用於很多判斷重複的問題,它不僅僅適用於基本資料型別,也可以用在判斷物件的重複。可以說是種萬精油的方法吧
class Solution {
private Set save = new HashSet();
public boolean containsDuplicate(int[] nums) {
for(int a : nums){
//Set.add(Object)新增失敗會返回false
if(!save.add(a))return true;
}
return false;
}
}
- 為什麼不在裡面用
Set.contains( )
來進行判斷呢?
因為這在每次插入時會浪費一次查詢時間
PS:過段時間,會在部落格裡,寫對 Arrays.sort( ) 與 HashCode 的原始碼分析