【题目】: 给定一个有序数组arr,调整arr使得这个数组的左半部分没有重复元素且升序,而不用保证右部分是否有序 例如: arr=[1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 8, 8, 9],调整之后arr=[1, 2, 3, 4, 5, 6, 7, 8, 9, ...
分类:
编程语言 时间:
2019-01-01 15:25:11
阅读次数:
223
插入排序类似于整理扑克牌,基本操作是将一个记录分为有序数列、待插入数列,将待插入数列依次插入到有序数列中对应的位置,最终得到一个有序的数列;插入排序的时间复杂度为O(n^2),空间复杂度为O(1),是稳定的排序方法,适用于数量较少的排序,相对冒泡排序而言是一种较为快捷方便的排序算法。具体步骤:1.默 ...
分类:
编程语言 时间:
2018-12-31 23:42:16
阅读次数:
262
求众数II 给定一个大小为 n 的数组,找出其中所有出现超过 ? n/3 ? 次的元素。 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。 示例 1: 输入: [3,2,3] 输出: [3] 示例 2: 输入: [1,1,1,3,3,2,2,2] 输出: [1,2] 摩尔投票法的基 ...
分类:
其他好文 时间:
2018-12-31 20:24:24
阅读次数:
180
算法 今天给大家带来一篇关于算法排序的分类,算法的时间复杂度,空间复杂度,还有怎么去优化算法的文章,喜欢的话,可以关注,有什么问题,可以评论区提问,可以与我私信,有什么好的意见,欢迎提出. 前言: 算法的复杂度分为时间复杂度与空间复杂度,时间复杂度指执行算法需要需要的计算工作量,空间复杂度值执行算法 ...
分类:
编程语言 时间:
2018-12-30 13:58:54
阅读次数:
269
自10月来,我用了3个个多月,做了大概120题, 感觉编码水平有所提升。 前120题还未总结,先记录这几天学到的东西。 Leetcode-173: BST迭代器设计 语言:C++ 简介:说白了,就是BST的非递归中序遍历,需要一个栈做辅助结构。 测试结果: 40ms 空间复杂度:与树高成正比,最好情 ...
分类:
其他好文 时间:
2018-12-29 21:03:24
阅读次数:
327
恢复内容开始 一、研究数组排序的意义: 数据结构中,排序算法各有用处,不同的排序方法有不同的时间复杂度与空间复杂度。为了能够依据不同情况,选用不同的排序方法解决不同的问题。 二、常见的数组排序方法: 以下研究,默认是对操作数组进行从小到大的排序。使用语言是Java。 1.选择排序法 选择排序法是将需 ...
分类:
编程语言 时间:
2018-12-28 20:38:58
阅读次数:
228
1. 记忆化搜索 - 自上向下的解决问题:使用vector来保存每次计算的结果,如果下次再碰到同样的需要计算的式子就不需要重复计算了。 2. 动态规划 - 自下向上的解决问题 解法一:自顶向下 解法二:自底向上 注意:从2只能移动到3和4;从3只能移动到6和5. 思路:设从位置(i,j)达到底部的最 ...
分类:
其他好文 时间:
2018-12-27 03:13:19
阅读次数:
129
前几节学习了「链表」、「时间与空间复杂度」的概念,本节将结合「循环链表」、「双向链表」与 「用空间换时间的设计思想」来设计一个很有意思的缓存淘汰策略:LRU缓存淘汰算法。 三种最常见的链表结构 循环链表的概念 如上图所示:单链表的尾结点指针指向空地址,表示这就是最后的结点了。而循环链表的尾结点指针是 ...
分类:
编程语言 时间:
2018-12-24 16:25:52
阅读次数:
179
双索引技术(Two Pointer) 滑动窗口:这两个索引表示的是一个窗口,让这个窗口不停的在数组中滑动,来找到问题的解。 -什么叫子数组:可以不连续。但是本题强调了是要连续的。、 解法一:滑动窗口 时间复杂度:O(n),空间复杂度O(1) 因为没有另外开辟空间。 思路:和209类似采用滑动窗口的思 ...
分类:
其他好文 时间:
2018-12-22 01:28:21
阅读次数:
379
内容: 1、时间复杂度 2、简单排序 3、对数器使用 4、递归 注:实现代码为Java 1、时间复杂度 什么是常数时间的复杂度:一个操作如果跟数据量没有关系,每次都是固定时间内完成的操作就叫常数操作 关于时间复杂度: 时间复杂度为一个算法流程中常数操作数量的指标(一般是最差情况下),常用O(读作bi ...
分类:
编程语言 时间:
2018-12-22 01:26:02
阅读次数:
173