剑指offer
wuliLan
计算机专业学生。研究生在读。
展开
-
《剑指offer》数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路1:先排序,统计次数,超过一半就停止循环。 这里用sorted()排序,在做笔试的题的时候很快,但是在面试的时候,面试官会希望你排序的内容也要写出来,那么排序最快也得...原创 2018-08-09 18:41:04 · 106 阅读 · 0 评论 -
《剑指offer》复杂链表的复制
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路:要考虑链表的next和random指针,如果在同一循环里做会比较乱,而且也不好拆分。 所以把复制的步骤分成三个模块, 1、复制next部分。先把所有节点复...原创 2018-08-06 12:02:42 · 103 阅读 · 0 评论 -
《剑指offer》重建二叉树的解法
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:前序遍历是先遍历根节点,再依次遍历左节点和右节点。 中序遍历是先遍历左节点,然后根节点,最后右节点。 那么首先要去前序找根节点,再...原创 2018-06-24 15:58:53 · 833 阅读 · 0 评论 -
《剑指offer》二叉搜索树与双向链表
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:注意题干,不能创造新节点的意思就是 希望直接把二叉树变成双向链表,也就是要改变树内部节点的左右指针的连接顺序。二叉排序树的特点是 左子树<根节点<右子树,而且没有重复节点。这意味着,如果我们就按照中序遍历:左根右 来遍历,就能刚好得到一个有序的节...原创 2018-08-06 16:39:59 · 186 阅读 · 0 评论 -
《剑指offer》字符串的排列(全排列,重复字符串和非重复字符串的处理)
题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。思路:不需要去重的思路:1、递归类取第一个数,依次和剩下的数进行位置交换。如果要交换的数,已经在该数前面几个数中出现过了,则不交换。否则交换完后,就把除第一个数的剩余数进行全排列。全排列完了记...原创 2018-08-08 15:43:16 · 833 阅读 · 0 评论 -
Python 快速排序 两种递归写法(用辅助空间和不用辅助空间)
1、快速排序 快速排序算法,简称快排,是最实用的排序算法,没有之一,各大语言标准库的排序函数也基本都是基于快排实现的。 用递归思路: 思想:随机选取一个基准,通常可以是第一个数或者最后一个数。 将剩下的数分为两个数组,小于等于这个数的划分到左数组,大于这个数划分到右数组。然后返回 左数组+基准+右数组。接着递归进去,对左、右数组做同样的操作,也就是做快排。直到子数组的长度小于等于1时,返回...原创 2018-08-24 06:22:47 · 1357 阅读 · 1 评论 -
数组去重Python 几种解法
整数数组里面有重复元素,如果不考虑数组顺序的改变就是可以排序,如何去重nlogn?如果要保留原有数组顺序,如何去重? 利用辅助空间,List,把元素重新加入,如果已加入的就不添加,这样只用遍历一次,留下不重复的元素O(n^2) 因为list自导的 x in list其实是O(n)的复杂度。def unique(old_list): newList = [] for x in...原创 2018-08-24 12:09:50 · 3983 阅读 · 0 评论