給定一個(gè)整數(shù)數(shù)組,找出其中兩個(gè)數(shù)相加等于目標(biāo)值

原創(chuàng):悅樂(lè)書 程序員小川

給定一個(gè)整數(shù)數(shù)組,找出其中兩個(gè)數(shù)相加等于目標(biāo)值

例如:給定數(shù)組及目標(biāo)值 nums = [2,7,11,15] ,target = 9
因?yàn)閚ums[0] + nums[1] = 2 + 7 = 9
返回[0,1]
利用HashMap

解法一:

這道題目求的是數(shù)組內(nèi)任意兩元素之和等于給定的目標(biāo)整數(shù),于是很容易想到數(shù)組for循環(huán)遍歷,并且是兩層for循環(huán),于是第一版的代碼思路已經(jīng)有了。

//java代碼實(shí)現(xiàn)
private int[] findData(int[] array,int target){
   int[] result={-1,-1};
   HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
   for(int i=0;i<array.length;i++){
      map.put(array[i],i); 
     }

 for(int i=0;i<array.length;i++){
      int two = target-array[i];
     if(map.containKey(two)&&target!=2*two){
          result[0]=i;
         result[1]=map.get(two);
         break;
   }
 }
 retrurn result;
}
//Kotlin代碼實(shí)現(xiàn)
fun twoSum1(nums: IntArray, target: Int): IntArray? {
            var result = IntArray(2)
            if (nums.size < 2)
                return null
            for (i in 0..nums.size-1) {
                for (j in i + 1..nums.size-1) {
                    if (nums[i] + nums[j] == target) {
                        result[0] = nums[i]
                        result[1] = nums[j]
                    }
                }
            }
            return result;
        }
解法二:

上面的解法是兩層循環(huán),循環(huán)次數(shù)是n*(n-1)次,n為數(shù)組元素個(gè)數(shù),n越大,程序執(zhí)行的時(shí)間越長(zhǎng),那能不能只循環(huán)一次?既然可以做加法匹配,那做減法呢?先拿到目標(biāo)整數(shù)與數(shù)組中每位元素的差值,再去判斷此差值是否存在于此數(shù)組中。這時(shí),我們需要一個(gè)存新數(shù)據(jù)的集合,既包含每位元素,也包含每位元素的索引,對(duì)此選取Map作為存放新數(shù)據(jù)的對(duì)象。

 //java實(shí)現(xiàn)
 public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        int[] result=new int[2];
        for(int i=0;i<nums.length;i++){
            int value = target-nums[i];
            if(map.containsKey(value))
            {
               result[0]=i;
               result[1]=map.get(value);
                break;
            }          
            map.put(nums[i],i);
        }
        return result;
        
    }
//Kotlin實(shí)現(xiàn)
 fun twoSum2(nums: IntArray, target: Int): IntArray? {
            var result = IntArray(2)
            if (nums.size < 2)
                return null
            var map = HashMap<Int, Int>()
            for (i in 0..nums.size-1) {
                val k = target - nums[i]
                if (map.containsKey(k)) {
                    result[0] = nums[map.get(k)!!]
                    result[1] = nums[i]
                    break
                }
                map.put(nums[i], i)
            }
            return result
        }

最后編輯于
?著作權(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)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,890評(píng)論 0 33
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 窗外,如約見了月光 一個(gè)被叫醒了的人 看見它圓潤(rùn)的、潔白臉龐 故鄉(xiāng)是美的,一如 清晨做的這一個(gè)小夢(mèng)。
    慕風(fēng)夕閱讀 180評(píng)論 0 4
  • 好久沒有在這里寫這里。原來(lái)。她和他又過(guò)了一關(guān)。其實(shí)每個(gè)月她們之間都有戰(zhàn)斗的,可是不知道為什么這個(gè)月她們戰(zhàn)斗多那。還...
    野蠻開心冬閱讀 208評(píng)論 0 0

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