一、链表的反转 示例: 分析 :刚开始的时候很自然的想到,创建一个列表,然后遍历链表,将每个节点保存在列表中,然后根据列表,反向构造一个新的链表。但是这个很明显很low,一方面是空间复杂度为O(n),一方面是要遍历两遍。后来想都到了另外一种方法,只需要遍历一遍,然后所需的额外空间也非常少。 核心思想 ...
分类:
其他好文 时间:
2018-10-01 13:19:12
阅读次数:
180
1、题目:反转单链表或双链表 要求:如果链表长度为N,时间复杂度为O(N),额外的空间复杂度为O(1) 反转单链表的思路: 1 → 2 → 3 → 4 → 5 (1)first = head = 1 循环: temp = head.next 2 head.next = temp.next 1 → 3 ...
分类:
其他好文 时间:
2018-10-01 12:24:26
阅读次数:
230
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) connected 4-directionally (horizontal or vertical.) Yo ...
分类:
编程语言 时间:
2018-09-29 14:21:51
阅读次数:
179
我们都知道,数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间。所以,执行效率是算法一个非常重要的考量指标。那如何来衡量你编写的算法代码的执行效率呢?这里就要用到我们今天要讲的内容:时间、空间复杂度分析。其实,只要讲到数据结构与算法,就一定离不开时间、空间 ...
分类:
编程语言 时间:
2018-09-29 01:18:20
阅读次数:
191
书接上文。 输入一组数,找出其中满足某种条件的数。 短短的一句话,可以衍生出各种场景。今天遇到一道题,输入一些学生的分数,哪个分数出现的次数最多?如果有多个并列,从大到小输出。分数均为不超过100的非负整数。 我首先想到的是利用哈希表,用空间换时间。 1 #include<iostream> 2 u ...
分类:
其他好文 时间:
2018-09-28 20:54:57
阅读次数:
164
2018-09-23 13:25:40 主元素问题是一个非常经典的问题,一般来说,主元素问题指的是数组中元素个数大于一半的数字,显然这个问题可以通过遍历计数解决,时间复杂度为O(n),空间复杂度为O(n)。这样的算法有两个弊端,一是空间复杂度较高,二是没法处理数据流问题。 因此就有了Boyer-Mo ...
分类:
其他好文 时间:
2018-09-23 15:07:20
阅读次数:
129
题目: Given an array, rotate the array to the right by k steps, where k is non-negative. 给定一个数组,将数组向右旋转k步,其中k为非负数。 Example 1: Example 2: Note: Try to co ...
分类:
其他好文 时间:
2018-09-21 10:58:33
阅读次数:
158
将栈中的元素倒置,一种最简单的办法是利用数组存储栈弹出的元素,而后再压入栈中,空间复杂度O(N),时间复杂度O(2N)。 另一种方法是利用递归将栈中的元素倒置。 假设原栈中的元素为 5(5在栈顶) 4 3 2 1 那么倒置后栈中的元素应为 1 2 3 4 5 如果已经将1,2倒置了,即栈中的元素为 ...
分类:
其他好文 时间:
2018-09-20 12:21:47
阅读次数:
233
快速排序 上述的快速排序实现很好理解,就是每次遍历当前的arr,将比中间值小的放到left,大的放到right。这是前端通常的版本,但是这样的版本是有问题的。正常的我们说快排的时间复杂度平均和最好都是O(nlogn),最坏情况下是O(n^2),空间复杂度为O(nlogn)。这个代码中,空间复杂度为O ...
分类:
编程语言 时间:
2018-09-19 13:31:35
阅读次数:
154
01.计数排序、桶排序与基数排序 并不是所有的排序 都是基于比较的,计数排序和基数排序就不是。基于比较排序的排序方法,其复杂度无法突破$n\log{n}$ 的下限,但是 计数排序 桶排序 和基数排序是分布排序,他们是可以突破这个下限达到O(n)的的复杂度的 。 1. 计数排序 概念 计数排序是一种稳 ...
分类:
编程语言 时间:
2018-09-16 15:49:47
阅读次数:
184