| 1.两数之和 | nums = [2,7,11,15], target = 9 | HashMap,遍历数组 nums,i 为当前下标,每个值都判断map中是否存在 target-nums[i] 的 key 值 |
| 15.三数之和 | 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 | 1.特判,对于数组长度 n,如果数组为 null或者数组长度小于 3,返回 []。2.Arrays.sort()对数组进行排序。3.遍历排序后数组:双指针,以及去除重复解,判断左界和右界是否和下一位置重复。并同时将 L,R 移到下一位置,寻找新的解 |
| 26.删除有序数组中的重复项 | 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 | 快慢指针技巧 nums[fast] != nums[slow]) slow++; nums[slow] = nums[fast]; |
| 53.最大子数组和 | 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 | 动态规划,子问题,取最大值.子问题 1:以 -2− 结尾的连续子数组的最大和是多少;子问题 2:以 11 结尾的连续子数组的最大和是多少;子问题的定义必须以一个数结尾 |
| 88.合并两个有序数组 | 输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6] | 从后往前确定两组中该用哪个数字,另一个是结束条件以第二个数组全都插入进去为止 |
| 118.杨辉三角 | 输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] | 取错一位,再逐个相加;Integer[] //Integer[] 转 List List list2 = Arrays.asList(integers1) |
| 121.买卖股票的最佳时机 | 输入:[7,1,5,3,6,4] 输出:5 | 1.动态规划 dp[i][k][0 or 1] 0 <= i <= n - 1, 1 <= k <= K n 为天数,大 K 为交易数的上限,0 和 1 代表是否持有股票。2.暴力解法,第二个减去第一个 |
| 169.多数元素 | 为 n 的整数数组,找出其中所有出现超过 ⌊ n/2 ⌋ 次的元素。 | 摩尔投票法,相互抵消 |
| 229.求众数 II | 为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 | continue:跳过当前程序,直接执行下一次程序 |
| 剑指 Offer 53 - I. 在排序数组中查找数字 I | 统计一个数字在排序数组中出现的次数。 | 寻找右边界和左边界,right - left - 1; 二分 |