精选 100 道力扣(LeetCode)上最热门的题目,本篇文章只有easy级别的,适合初识算法与数据结构的新手和想要在短时间内高效提升的人。
1.两数之和
https://leetcode-cn.com/problems/two-sum
方法一
/** * @param {number[]} nums * @param {number} target * @return {number[]} */ var twoSum = function (nums, target) { for (let i = 0; i < nums.length; i++) { let diff = target - nums[i] for (let j = i + 1; j < nums.length; j++) { if (diff == nums[j]) { return [i, j] } } } }
方法二
/** * @param {number[]} nums * @param {number} target * @return {number[]} */ var twoSum = function (nums, target) { var temp = [] for (var i = 0; i < nums.length; i++) { var dif = target - nums[i] if (temp[dif] != undefined) { return [temp[dif], i] } temp[nums[i]] = i } }
14.最长公共前缀
https://leetcode-cn.com/problems/longest-common-prefix
思路:
- 先遍历数组
- 再遍历数组的第一个字符串,用字符串中的每一个字符和数组中的每一项的对应的该字符串下标相比,不同则跳出循环,两两找出公共前缀,最终结果即为最长公共前缀的长度 j。
- 截取字符串长度 j 的字符即为最长公共前缀
const strs = ['flower', 'flow', 'flight'] const longestCommonPrefix = function (strs) { if (strs === null || strs.length === 0) return '' let commonString = '' for (let i = 1; i < strs.length; i++) { let j = 0 for (; j < strs[0].length && j < strs[i].length; j++) { if (strs[0][j] !== strs[i][j]) break } commonString = strs[0].substring(0, j) } return commonString } longestCommonPrefix(strs)
18.删除链表的节点
https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof
var deleteNode = function (head, val) { if (head.val === val) return head.next let prev = head, node = prev.next while (node) { if (node.val === val) { prev.next = node.next } prev = node node = node.next } return head }
20.有效的括号
https://leetcode-cn.com/problems/valid-parentheses
方法分析:
该题使用的堆栈(stack)的知识。栈具有先进后出(FILO)的特点。堆栈具有栈顶和栈底之分。所谓入栈,就是将元素压入(push)堆栈;所谓出栈,就是将栈顶元素弹出(pop)堆栈。先入栈的一定后出栈,所以可以利用堆栈来检测符号是否正确配对。
解题思路:
- 有效括号字符串的长度,一定是偶数!
- 右括号前面,必须是相对应的左括号,才能抵消!
- 右括号前面,不是对应的左括号,那么该字符串,一定不是有效的括号!
var isValid = function (s) { let stack = [] if (!s || s.length % 2) return false for (let item of s) { switch (item) { case '{': case '[': case '(': stack.push(item) break case '}': if (stack.pop() !== '{') return false break case '[': if (stack.pop() !== ']') return false break case '(': if (stack.pop() !== ')') return false break } } return !stack.length }
21.合并两个有序链表
https://leetcode-cn.com/problems/merge-two-sorted-lists
/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } */ /** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */ var mergeTwoLists = function (l1, l2) { if (l1 === null) { return l2 } else if (l2 === null) { return l1 } else if (l1.val < l2.val) { l1.next = mergeTwoLists(l1.next, l2) return l1 } else { l2.next = mergeTwoLists(l1, l2.next) return l2 } }
53.最大子序和
https://leetcode-cn.com/problems/maximum-subarray
/** * @param {number[]} nums * @return {number} */ var maxSubArray = function (nums) { let ans = nums[0] let sum = 0 for (const num of nums) { if (sum > 0) { sum += num } else { sum = num } ans = Math.max(ans, sum) } return ans }
70.爬楼梯
https://leetcode-cn.com/problems/climbing-stairs
var climbStairs = function (n) { let dp = [] dp[0] = 1 dp[1] = 1 for (let i = 2; i <= n; i++) { dp[i] = dp[i - 1] + dp[i - 2] } return dp[n] }
101.对称二叉树
https://leetcode-cn.com/problems/symmetric-tree
/**递归 代码 * @param {TreeNode} root * @return {boolean} */ var isSymmetric = function (root) { const check = (left, right) => { if (left == null && right == null) { return true } if (left && right) { return ( left.val === right.val && check(left.left, right.right) && check(left.right, right.left) ) } return false // 一个子树存在一个不存在,肯定不对称 } if (root == null) { // 如果传入的root就是null,对称 return true } return check(root.left, root.right) }
112.路径总和
https://leetcode-cn.com/problems/path-sum
var hasPathSum = function (root, targetSum) { // 深度优先遍历 if (root === null) { //1.刚开始遍历时 //2.递归中间 说明该节点不是叶子节点 return false } if (root.left === null && root.right === null) { return root.val - targetSum === 0 } // 拆分成两个子树 return ( hasPathSum(root.left, targetSum - root.val) || hasPathSum(root.right, targetSum - root.val) ) }
136.只出现一次的数字
https://leetcode-cn.com/problems/single-number
/** * @param {number[]} nums * @return {number} */ var singleNumber = function (nums) { let ans = '' for (const num of nums) { ans ^= num console.log(ans) } return ans }
155.最小栈
https://leetcode-cn.com/problems/min-stack
var MinStack = function () { this.x_stack = [] this.min_stack = [Infinity] } MinStack.prototype.push = function () { this.x_stack.push(x) this.min_stack.push(Math.min(this.min_stack[this.min_stack.length - 1], x)) } MinStack.prototype.pop = function () { this.x_stack.pop() this.min_stack.pop() } MinStack.prototype.top = function () { return this.x_stack[this.x_stack.length - 1] } MinStack.prototype.getMin = function () { return this.min_stack[this.min_stack.length - 1] }