leetcode 算法第一集

前言:

各位同學(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è)試一把

image.png

方法二

對(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è)試效果 :

image.png

##  完整代碼 
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,小弟在這里

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容