// 面试题56(一):数组中只出现一次的两个数字 // 题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序 // 找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 #include <cstdio> unsigned int FindFirstBit ...
分类:
编程语言 时间:
2020-04-08 12:12:33
阅读次数:
78
一:解题思路 一种比较容易想到的解法是定义2个记录行和列的数组,先遍历一遍原始的数组,如果出现了0,这记录到行列数组为true。然后再遍历一遍数组,如果在行列数组中标记为true了,则将所在的行列全部置0.这种方法用了2个额外的数组,空间复杂度不够低。另外一种方法可以将空间复杂度变为O(1)。Tim ...
分类:
其他好文 时间:
2020-04-07 18:34:34
阅读次数:
56
前言 一个算法的优劣好坏,会决定一个程序运行的时间、空间。也许当小数据量的时候,这种影响并不明显,但是当有巨量数据的时候,算法的好坏带来的性能差异就会出天差地别。可以说直接影响了一个产品的高度和广度。每个程序员都想用最优的算法解决问题,我们期待自己写出的代码是简洁、高效的。但是如何评判一个算法的好坏 ...
分类:
其他好文 时间:
2020-04-07 12:58:35
阅读次数:
68
1.应聘者在电话面试的时候尽可能用形象的语言把细节说清楚。 2.如果英语面试时没有听清或没听懂,要敢于说Pardon。大胆提问,直到搞清楚面试官的意图。 3.编程习惯: 思考清楚再动手(思路、算法时间、空间复杂度、特殊情况处理); 良好的代码命名和缩进对齐习惯; 能够单元测试(能做到测试在前、开发在 ...
分类:
其他好文 时间:
2020-04-06 13:35:20
阅读次数:
93
1、反转链表 "力扣地址" 实现方法一:三指针遍历,pre+cur+next;时间复杂度O(n),空间复杂度O(1)。 实现方法二:递归解法,1+ (reverse(2,3));时间复杂度O(n),空间复杂度O(n)(递归调用要占用系统栈空间)。 2、删除链表的节点 "力扣地址" 解法:增加dumm ...
分类:
编程语言 时间:
2020-04-05 13:47:46
阅读次数:
84
归并排序 基本思想 将待排序元素分成大小大致相同的 2 个子集合; 分别对 2 个子集合进行排序; 最终将排好序的子集合合并成为所要求的排好序的集合。 最常使用的归并排序方法是2 路归并排序。 复杂度和稳定性 时间复杂度:O(nlog2n) 空间复杂度:O(n) 稳定性:稳定 代码 ...
分类:
编程语言 时间:
2020-04-05 00:14:45
阅读次数:
90
交换排序 基本思想: 是两两比较待排序对象的排序码,如发生逆序(即排列顺序与排序后的次序正好相反),则交换之,直到所有对象都排好序为止。 主要算法: 冒泡排序:BubbleSort 快速排序:QuickSort 冒泡排序 基本思想 设待排序元素序列中的元素个数为 n。最多作 n 1 趟,i = 1, ...
分类:
编程语言 时间:
2020-04-04 20:33:11
阅读次数:
72
1:题目描述 输入两个链表,找出它们的第一个公共节点。 如下面的两个链表: 在节点 c1 开始相交。尽量满足时间复杂度为O(n)和空间复杂度为O(1)即可。 2:题目分析 2.1:利用HashSet 将第一个链表所有节点保存起来,然后遍历第二链表,找到第一个已经在Set里的节点即可。 2.2:双指针 ...
分类:
其他好文 时间:
2020-04-04 11:50:30
阅读次数:
63
快速排序 优点: 好写 局部性好 空间复杂度平均为O(logn) 缺点: 不稳定 朴素地选择第一个元素或者最后一个元素容易退化 选择中间的元素不容易退化,但是对特定的序列仍然有可能退化 优势在于局部性原理,相邻几次调整的区间都几乎涉及同一片内存,所以比归并排序以及堆排序更优。 挺好记的。为什么要写 ...
分类:
编程语言 时间:
2020-04-01 09:16:10
阅读次数:
70
问题 解释一下算法复杂度 答案 算法一般包括以下衡量指标:正确性、可读性、健壮性、良好的时空效率,其中的时空效率就是对算法复杂度的衡量。 算法的效率一般由以下因素决定: (1)算法采用何种策略,排序算法中快速排序就快于冒泡排序 (2)问题的规模,寻找10以内的质数显然快于寻找1000以内的质数 (3 ...
分类:
编程语言 时间:
2020-03-31 19:01:35
阅读次数:
65