1. 程式人生 > 其它 >演算法-兩數之和

演算法-兩數之和

演算法練習 day01

給定一個整數陣列 nums和一個整數目標值 target,請你在該陣列中找出 和為目標值 target 的那兩個整數,並返回它們的陣列下標。

你可以假設每種輸入只會對應一個答案。但是,陣列中同一個元素在答案裡不能重複出現。

你可以按任意順序返回答案。

示例 1:

輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

解題思路:

算出剩餘陣列中是否存在target-nums[i]的值

解題:

利用雙迴圈,查詢target-nums[i],找到結束迴圈

(注意第二次迴圈不需要和之前的數字對比)

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
var d,p;
    for(var i=0;i<nums.length;i++){
        var a=target-nums[i];
        
         for(var j=i+1;j<nums.length;j++){
            if(nums[j]==a){
                p=j;
                d=i;
               break 
            }
        } 
    }
    return [d,p]
};

  

進階解題思路

還是找對應target-nums[i]的,這次用map物件,對映關係去尋找

// new Map的函式方法
// has 如果對映中包含指定元素,則返回true
// get 返回對映中的制定元素
// set 新增新建元素到對映
// valueOf 返回指定物件原始值
// clear 刪除對映中所有元素
// delete 刪除對映中指定元素
var twoSum = function(nums, target) {
    let map = new Map();//一種對映關係
    for(let i = 0; i < nums.length; i++) {
        // 當map中是否有 target-nums[i]的值
if(map.has(target - nums[i])){ //有 返回對應的index,以及當前i==index 結束迴圈 return [map.get(target - nums[i]),i] }else{ // 沒有 設定對應map對映 數字=》座標 繼續迴圈 map.set(nums[i],i) } } };

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/two-sum
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。