Easy
1> 27. Remove Element移除元素
详细解题: https://blog.youkuaiyun.com/u014256231/article/details/83241338
题目大意:
给定一个数组 nums 和一个值 val,原地移除所有数值等于 val 的元素,返回移除后数组的新长度。示例: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。
解题思路1: 两个指针i、j,遍历一次 i指向遍历的位置,j指向不是val的位置,将i位置不等于val的值赋值给j的位置。
解题思路2: 维护两个变量:start和end,如果遍历到的变量和target相等,则把start和end的数交换,把end-=1;其他情况把start+=1。
2> 26. Remove Duplicates from Sorted Array 删除排序数组中的重复项
详细解题: https://blog.youkuaiyun.com/u014256231/article/details/83241886
题目大意: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。给定 nums = [0,0,1,1,1,2,2,3,3,4], 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
解题思路: 双指针,外面循环num in nums, 里面判断if num > nums[i-1], num[i] = num, i+=1.
3> 35. Search Insert Position搜索插入位置
详细解题: https://blog.youkuaiyun.com/u014256231/article/details/83243381
题目大意: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。
【输入: [1,3,5,6], 5 输出: 2]】【输入: [1,3,5,6], 2 输出: 1】
解题思路1: 遍历一遍,直到target比某数组元素小于等于,返回;如果不存在说明target最大,返回len。
解题思路2: 遍历一遍,返回比target小的元素个数。
解题思路3: 二分查找
4> 53. Maximum Subarray最大子序和
详细解题: https://mp.youkuaiyun.com/mdeditor/83309668#
题目大意: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组。
【输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6】解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
解题思路1:
curSum = max(curSum+num, num)
maxSum = max(maxSum, curSum)
解题思路2: 当前一个数是正数时,每一个数覆盖为前面一个数和当前数的和,最后返回max
if nums[i-1] > 0:
nums[i] += nums[i-1]
5> 66. Plus One加一
详细解题: https://blog.youkuaiyun.com/u014256231/article/details/83352381
题目大意: 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
【输入: [1,2,3] 输出: [1,2,4]】解释: 输入数组表示数字 123。
解题思路1: 倒着遍历,如果不是9,直接+1返回,如果是9,置0,遍历到下一个不是9的数会+1返回。如果遍历完了还没返回说明全是9,这时候返回[1] + [0] * len(digits)
for i in range(len(digits)):
if digits[~i] < 9:
digits[~i] += 1
return digits
digits[~i] = 0
return [1] + [0] * len(digits)
解题思路2: 把list还原成数字,返回[int(i) for i in str(num+1)]
6> 88. Merge Sorted Array 合并两个有序数组
详细解题: https://blog.youkuaiyun.com/u014256231/article/details/83448228
题目大意: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
【输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3 输出: [1,2,2,3,5,6]】
解题思路: 比较两个数组的最大值,最后从大到小赋值给nums1 。if nums1[m-1] >= nums2[n-1]: nums1[m+n-1] = nums1[m-1] m -= 1
最后,如果nums1还有剩余无所谓,nums2有剩余覆盖在nums1的最前面。
7> 118. Pascal’s Triangle 杨辉三角
详细解题: https://blog.youkuaiyun.com/u014256231/article/details/83451155
题目大意: 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
【输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]】
解题思路1: 一行一行求row,再append起来
解题思路2: [1 2 1] -> [0 1 2 1]+[1 2 1 0] -> [1 3 3 1]
res = [[1]]
for i in range(1, numRows):
res += [map(lambda x, y: x+y, res[-1] + [0], [0] + res[-1])]
return res[:numRows]
解题思路3: 运用杨辉三角的公式,比方第五行的数是:C(4,0) C(4,1) C(4,2) C(4,3) C(4,4)
8> 119. Pascal’s Triangle II 杨辉三角 II
详细解题: https://blog.youkuaiyun.com/u014256231/article/details/83451306
题目大意: 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
【输入: 3 输出: [1,3,3,1]】
解题思路1: 运用杨辉三角的公式直接计算,比方第五行的数是:C(4,0) C(4,1) C(4,2) C(4,3) C(4,4)
解题思路2: 求出所有杨辉三角
row = [x + y for x, y in zip([0]+row, row+[0])]
9> 121. Best Time to Buy and Sell Stock 买卖股票的最佳时机
详细解题: https://blog.youkuaiyun.com/u014256231/article/details/83502713
题目大意: 给定一个数组,求后面的数字减前面数字的最大差
【输入: [7,1,5,3,6,4] 输出: 5】解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
解题思路: 要找的是每个最小值之后的最大差值。正向遍历一次,维护两个变量: minnum和maxprofit。
10> 122. Best Time to Buy and Sell Stock II 买卖股票的最佳时机
详细解题: https://blog.youkuaiyun.com/u014256231/article/details/83506829
题目大意: 你可以尽可能地完成更多的交易(多次买卖一支股票),当然时间不能有交叉。
【输入: [7,1,5,3,6,4] 输出: 7】解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
解题思路1: 只要涨就买。比如[7 1 2 4 8 2 1 4 5 3],从1-2涨1,2-4涨2,4-8涨4,1-4涨3,4-5涨1.