# Algorithms leetcode ###### tags: `algorithms` `leetcode` `code` `leet` `thuật toán` Big O https://www.bigocheatsheet.com Quan trọng 2 thứ : + Thời gian chạy + Bộ nhớ ### 1. Two sum Example 1: ```javascript Input: nums = [2,7,11,15], target = 9 Output: [0,1] Explanation: Because nums[0] + nums[1] == 9, we return [0, 1]. ``` Example 2: ```javascript Input: nums = [3,2,4], target = 6 Output: [1,2] ``` Example 3: ```javascript! Input: nums = [3,3], target = 6 Output: [0,1] ``` :::spoiler **Đáp án 1 : O(n^2) -> terrible** ```javascript! var twoSum = function (nums, target) { for (let i = 0; i < nums.length - 1; i++) { for (let k = i + 1; k < nums.length; k++) { if (nums[i] + nums[k] === target) return [i, k] } } return [] }; ``` ::: :::spoiler **Đáp án 2 : O(n) và memory : O(n)** Map(key, value:index) ```javascript! var twoSum = function (nums, target) { const map = new Map(); for(let i=0;i<nums.length;i++){ // map.set(key,value) // map.has(key) // map.get(key) let remain = target - nums[i]; if(map.has(remain)){ return [map.get(remain),i] }else{ map.set(nums[i],i); } } return [] }; ``` ::: ### 20. Valid parentheses https://leetcode.com/problems/valid-parentheses/ Example 1: ```javascript Input: s = "()" Output: true ``` Example 2: ```javascript Input: s = "()[]{}" Output: true ``` Example 3: ```javascript Input: s = "(]" Output: false ``` Đáp án : ```javascript var isValid = function(s) { if(!s.length) return true; const stack = []; const openChar = ['(','{','[']; const closeChar = [')','}',']'] for(let character of s){ const isOpenChar = ['(','{','['].includes(character); if(isOpenChar){ stack.push(character); }else{ const top = stack.pop(); if(openChar.indexOf(top)!==closeChar.indexOf(character)){ return false; } } } return stack.length === 0; }; ``` ### 21. Merge two sorted list link list https://leetcode.com/problems/merge-two-sorted-lists/ Solve : https://www.youtube.com/watch?v=XIdigk956u0&list=PLF_1Qi3jFDOsicefz1oRwhjPsKHdOD0A0&index=3 ```javascript /** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } */ /** * @param {ListNode} list1 * @param {ListNode} list2 * @return {ListNode} */ var mergeTwoLists = function (l1, l2) { const dummy = new ListNode(-Infinity); let prev = dummy; while (l1 && l2) { if (l1.val <= l2.val) { prev.next = l1; prev = l1; l1 = l1.next; } else { prev.next = l2; prev = l2; l2 = l2.next; // tăng 1 lên } } if (!l1) prev.next = l2; if (!l2) prev.next = l1; return dummy.next; }; ``` ### 121. Best Time to Buy and Sell Stock