1. 程式人生 > >LeetCode(初級演算法)陣列篇---存在重複

LeetCode(初級演算法)陣列篇---存在重複

題目

給定一個整數陣列,判斷是否存在重複元素。

如果任何值在陣列中出現至少兩次,函式應該返回 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 的原始碼分析