相交链表
题目 思路 用两个指针 pA 指向 headA,pB 指向 headB,每次都走一步,当某个指针走到 null 时,让它跳到另外一个链表的头,直到相交。 ...
题目 思路 用两个指针 pA 指向 headA,pB 指向 headB,每次都走一步,当某个指针走到 null 时,让它跳到另外一个链表的头,直到相交。 ...
题目 思路 思路一:两步变化,先转置再每行反转 ...
螺旋矩阵 思路 从外到内,按层遍历,一圈圈剥洋葱。 ...
题目 思路说明 前缀乘积 + 后缀乘积 Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Solution { public int[] productExceptSelf(int[] nums) { int n = nums.length; int[] ans = new int[n]; // 前缀乘积 ans[0] = 1; for (int i = 1; i < n; i++) { ans[i] = ans[i-1] * nums[i-1]; } // 后缀乘积 int suffix = 1; for (int i = n - 1; i >= 0; i--) { ans[i] = ans[i] * suffix; suffix *= nums[i]; } return ans; } } Python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: n = len(nums) ans = [1] * n for i in range(1, n): ans[i] = ans[i - 1] * nums[i - 1] suffix = 1 for i in range(n - 1, -1, -1): ans[i] *= suffix suffix *= nums[i] return ans JS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var productExceptSelf = function(nums) { const n = nums.length; const ans = new Array(n); ans[0] = 1; for (let i = 1; i < n; i ++) { ans[i] = ans[i-1] * nums[i-1]; } let suffix = 1; for (let i = n - 1; i >= 0; i --) { ans[i] *= suffix; suffix *= nums[i]; } return ans; }; Go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 func productExceptSelf(nums []int) []int { n := len(nums) ans := make([]int, n) ans[0] = 1 for i := 1; i < n; i ++ { ans[i] = ans[i-1] * nums[i -1] } suffix := 1 for i := n - 1; i >= 0; i-- { ans[i] *= suffix suffix *= nums[i] } return ans }
题目 思路 把子数组求和转换为前缀和差值计数。 ...
题目 单调队列 维护一个双端队列,里面存下标,让对应的值 nums[下标] 从队头到队尾单调递减: ...
题目 思路 思路 1 :动态规划 dp[i] = 以 i 位置结尾的最大子数组和 ...
题目 for 滑动窗口循环遍历,每次遍历以 l 为起点,r 为终点的滑动窗口是否包含重复字符,如果包含,则 l++,否则不停移动 r。 ...
题目 思路 利用定长滑动窗口,增量维护频次数组。 ...