5. 最长回文子串
121. 买卖股票的最佳时机
/*** @param {number[]} prices* @return {number}*/// 求targetDecrease值最大var maxProfit = function(prices) {var min = prices[0]var maxprofit = 0for (let j = 0; j < prices.length; j++) {if (prices[j] < min) {min = prices[j]} else if (prices[j] - min > maxprofit) {maxprofit = prices[j] - min}}return maxprofit};
54. 螺旋矩阵
按照层每次顺时针往前,每层结束时更新各个角的坐标,直到走完。
https://leetcode-cn.com/problems/spiral-matrix/solution/luo-xuan-ju-zhen-by-leetcode-solution/
var spiralOrder = function(matrix) {if (!matrix.length || !matrix[0].length) {return [];}const rows = matrix.length, columns = matrix[0].length;const order = [];let left = 0, right = columns - 1, top = 0, bottom = rows - 1;// while的条件为什么是这样while (left <= right && top <= bottom) {// 上for (let column = left; column <= right; column++) {order.push(matrix[top][column]);}// 右for (let row = top + 1; row <= bottom; row++) {order.push(matrix[row][right]);}??if (left < right && top < bottom) {for (let column = right - 1; column > left; column--) {order.push(matrix[bottom][column]);}for (let row = bottom; row > top; row--) {order.push(matrix[row][left]);}}[left, right, top, bottom] = [left + 1, right - 1, top + 1, bottom - 1];}return order;};
695. 岛屿的最大面积
/*** @param {number[][]} grid* @return {number}*/// 题意是求有边界的1有多少个岛// 两次循环走网格,// 终止条件为x轴的点大于grid[0],y轴的点小于grid.size// 如果检测点为1,count++var maxAreaOfIsland = function(grid) {var max = 0var count = 0var isArea = (i, j) => {// 这里巨饶,因为i其实是y轴return (i >=0 && i < grid.length && j >=0 && j < grid[0].length)}var dfs = (grid, i, j) => {// 超出区域if (!isArea(i, j)) {return}// 如果不是岛屿if (grid[i][j] !== '1') {count = 0return}// 标记过已经走的grid[i][j] = '2'// 寻找上下左右dfs(grid, i, j - 1)dfs(grid, i, j + 1)dfs(grid, i - 1, j)dfs(grid, i + 1, j)}// 外层循环是每个y轴的for (let i = 0; i < grid.length; i++) {// 内层循环是每个x轴的for (let j = 0; j < grid[0].length; j++) {if (grid[i][j] === '1') {max = Math.max(max, ++count)dfs(grid, i, j)}}}return count};
209. 长度最小的子数组
/*** @param {number} target* @param {number[]} nums* @return {number}*/// 找到最短的数组之和 >= target,返回数组长度// 双指针var minSubArrayLen = function(target, nums) {var res = 0for (let j = 0; j < nums.length; j++) {var tmp = 0var left = jvar right = nums.length - 1// 思路理解,但是不对while(left < right && target > tmp) {tmp += nums[left]if (nums[left] + tmp >= target) {temp = 0res = Math.min(res, left - j)}left++}}return res};
剑指 Offer 22. 链表中倒数第K个节点
/*** Definition for singly-linked list.* function ListNode(val) {* this.val = val;* this.next = null;* }*//*** @param {ListNode} head* @param {number} k* @return {ListNode}*/var getKthFromEnd = function(head, k) {// 1、计算长度,再len - k即为断的节点// 2、先反转链表,在到第K个时候断掉,再反转let len = 0let link = headwhile(link) {len++link = link.next}link = headfor (let i = 0; i < len - k; i++) {link = link.next}return link};
226. 翻转二叉树
1、递归
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var invertTree = function(root) {
if (root === null) {
return null;
}
// 递归
let left = invertTree(root.left)
let right = invertTree(root.right)
root.right = left
root.left = right
return root
};
2、bfs
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var invertTree = function(root) {
if (root === null) {
return null;
}
var q = [root]
while(q.length) {
var tmp = q.pop()
var left = tmp.left
tmp.left = tmp.right
tmp.right = left
if (tmp.left) {
q.push(tmp.left)
}
if (tmp.right) {
q.push(tmp.right)
}
}
return root
};
