日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode刷题-两数之和(持续更新)

發布時間:2025/1/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode刷题-两数之和(持续更新) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • LeetCode 1. Two Sum (兩數之和)
        • 題目描述
        • 樣例
        • 解題思路一(暴力法)
        • 解題思路二(使用map)

前言:最近業余時間,一直在看LeetCode上面的題,上面有許多好的解題思路可以借鑒到我們真正的項目中。總之,要靜下心來認真研究,對我們無論是目前做的項目還是以后出去面試,都會有很大的幫助。

LeetCode 1. Two Sum (兩數之和)

題目描述

給定一個整型數組,要求返回兩個數的下標,使得兩數之和等于給定的目標值,要求同一個下標不能使用兩次。
數據保證有且僅有一組解。

樣例

給定數組 nums = [2, 7, 11, 15],以及目標值 target = 9,

由于 nums[0] + nums[1] = 2 + 7 = 9,
所以 return [0, 1].

解題思路一(暴力法)

這個我們大家只要寫過一兩年代碼都會想到,就是兩遍for循環就可以搞定。

核心代碼如下

//暴力方法public static int[] twosum(int[] nums,int target) {for (int i = 0;i<nums.length;i++) {for (int j = i+1;j < nums.length;j++) {if (nums[j] == target - nums[i]) {return new int[] {j,i};}}}throw new IllegalArgumentException("No two sum solution");}

結果分析

暴力枚舉方法很簡單:兩重循環枚舉下標 i,j,然后判斷nums[i]+nums[j]nums[i]+nums[j] 是否等于 targettarget。時間復雜度:由于有兩重循環,所以復雜度是 O(n2)。

解題思路二(使用map)

  • 遍歷數組 nums,i 為當前下標,每個值都判斷map中是否存在 target-nums[i] 的 key 值
  • 如果存在則找到了兩個值,如果不存在則將當前的 (nums[i],i) 存入 map 中,繼續遍歷直到找到為止
  • 如果最終都沒有結果則拋出異常

核心代碼如下

//哈希表public static int[] twosumMap(int[] nums,int target) {Map<Integer,Integer> map = new HashMap<>();for (int i = 0;i < nums.length;i++) {if (map.containsKey(target - nums[i])) {return new int[] {map.get(target-nums[i]),i};}map.put(nums[i],i);}throw new IllegalArgumentException("No two sum solution");}

使用map時候可能大家會有疑問,如果遇到{2,2}這樣數據會出現問題,這一點我們做個小實驗就可以看出是否有問題。

public static void main(String[] args) {int[] nums = { 7,2,4, 11,2, 15};int[] twosum = twosumMap(nums, 4);System.out.println(Arrays.toString(twosum));}

結果為:[1, 4]

通過以上結果看出,如果出現重復的數據不會出現問題。
個人公眾號:
微信粉絲群

總結

以上是生活随笔為你收集整理的LeetCode刷题-两数之和(持续更新)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。