"删除排序数组中的重复项" 普通解和性能优化解
饭后小憩
官方地址:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/submissions/
问题描述
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例 1:
给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。
基本事实
比较容易想到的就是 相邻的元素进行比较,然后删除相同的相邻元素即可,重复这个过程直到数组末尾
另一种不容易想到的就是 把不重复的元素重新覆盖到元素数组中(不能使用额外数组,满足不使用额外的数组空间)
"最大子序和"dp解和其正确性分析
官方地址:https://leetcode-cn.com/problems/maximum-subarray/
问题描述
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
基本事实
穷举算法思路:选1个组合的最大值,选2个任意组合的最大值,直到选n个组合的最大值,最后再求最大值,时间复杂度比较高 n*CnM
dp规律思路:一直累加(只要累加的结果是正数),每次累加的结果比已经保存的结果大,就更新保存的结果(就是最大和),如果累加的结果为负,则从下一个元素重新开始累加,直到最后一个元素
初始值
- 最大和初始为:数组第一个元素
- 累加器初始值:数组第一个元素
"移掉K位数字"问题分析和算法实现-leetcode中等难度
官方地址:https://leetcode-cn.com/problems/remove-k-digits/
问题描述
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。
注意:
num 的长度小于 10002 且 ≥ k。
num 不会包含任何前导零。
示例 1 :
输入: num = "1432219", k = 3
输出: "1219"
解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。
基本事实
- 移除最大数无法保证移除后结果是最小的
- 使用单调递减队列保证从左往右剩余的数字最小
找"缺失的第一个正数"问题分析和算法实现-leetcode困难难度
leetcode官方地址:https://leetcode-cn.com/problems/first-missing-positive/
从提交结果可以看到官方准备了165个测试用例,这就是说这道题可能边界条件比较多
N皇后问题暴力解和回溯解问题分析和算法实现-leetcode困难难度
n皇后问题是经典的回溯解题的案例,回溯一般用在有多个解的算法中,回溯的核心是穷举,一般通过必要的减枝提高效率(减少重复计算等),得到一个解后,把当前解进行保存,然后将当前解标记为未解决,继续尝试下一个可能满足条件的解,即回溯
穷举解有利于理解问题的本质,回溯解提高解题效率
题目参考:https://leetcode-cn.com/problems/n-queens/
可以看到n皇后是leetcode上一道难度为困难的题
基本事实
3分钟做5道leetcode题上手leetcode刷题之路
在官网注册后,点击题库页面就可以看到所有可以刷的题目了
可以按照难度进行筛选、建议从简单难度的题上手
两数之和: https://leetcode-cn.com/problems/two-sum/
问题描述
Copyright © 2015 Theme used GitHub CSS. 访问人/ 次