演算法-兩數之和
阿新 • • 發佈:2021-08-04
演算法練習 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
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。