"删除排序数组中的重复项" 普通解和性能优化解

饭后小憩

官方地址:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/submissions/

问题描述

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

示例 1:

给定数组 nums = [1,1,2],

函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。

你不需要考虑数组中超出新长度后面的元素。

基本事实

比较容易想到的就是 相邻的元素进行比较,然后删除相同的相邻元素即可,重复这个过程直到数组末尾

另一种不容易想到的就是 把不重复的元素重新覆盖到元素数组中(不能使用额外数组,满足不使用额外的数组空间)

Read more   2019/10/9 posted in  leetcode

"最大子序和"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规律思路:一直累加(只要累加的结果是正数),每次累加的结果比已经保存的结果大,就更新保存的结果(就是最大和),如果累加的结果为负,则从下一个元素重新开始累加,直到最后一个元素

初始值

  1. 最大和初始为:数组第一个元素
  2. 累加器初始值:数组第一个元素
Read more   2019/10/7 posted in  leetcode

"移掉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。

基本事实

  1. 移除最大数无法保证移除后结果是最小的
  2. 使用单调递减队列保证从左往右剩余的数字最小
Read more   2019/10/6 posted in  leetcode

找"缺失的第一个正数"问题分析和算法实现-leetcode困难难度

leetcode官方地址:https://leetcode-cn.com/problems/first-missing-positive/


从提交结果可以看到官方准备了165个测试用例,这就是说这道题可能边界条件比较多

Read more   2019/10/6 posted in  leetcode

N皇后问题暴力解和回溯解问题分析和算法实现-leetcode困难难度

Read more   2019/10/3 posted in  leetcode

3分钟做5道leetcode题上手leetcode刷题之路

官网地址:https://leetcode-cn.com

在官网注册后,点击题库页面就可以看到所有可以刷的题目了

可以按照难度进行筛选、建议从简单难度的题上手

两数之和: https://leetcode-cn.com/problems/two-sum/

问题描述

Read more   2019/9/28 posted in  leetcode