求职算法
小旋锋
DGUT
展开
-
1_twoSum
Given an array of integers, return indices of the two numbers such that they add up to a specific target. 给定一个整形数组和一个目标值,返回数组中的两个下标,这两个下标的值之和等于目标值 You may assume that each input would have exac原创 2017-07-25 09:57:12 · 395 阅读 · 0 评论 -
折纸、寻找错误结点
请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折,压出折痕后再展 开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;突起的⽅向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边向上⽅ 对折,对折N次。请从上到下计算出所有折痕的⽅向。给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为”down”,若为上折痕则为”up”.#测试样例:1#返回:["down"]原创 2017-09-02 22:08:42 · 285 阅读 · 0 评论 -
平衡二叉树判断、完全二叉树判断
平衡二叉树判断完全二叉树判断平衡二叉树判断有一棵二叉树,请设计一个算法判断这棵二叉树是否为平衡二叉树。给定二叉树的根结点root,请返回一个bool值,代表这棵树是否为平衡二叉树。我的提交# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self原创 2017-09-02 14:36:44 · 485 阅读 · 0 评论 -
二叉树的序列化
首先我们介绍二叉树先序序列化的方式,假设序列化的结果字符串为str,初始时str等于空字符串。先序遍历二叉树,如果遇到空节点,就在str的末尾加上“#!”,“#”表示这个节点为空,节点值不存在,当然你也可以用其他的特殊字符,“!”表示一个值的结束。如果遇到不为空的节点,假设节点值为3,就在str的末尾加上“3!”。现在请你实现树的先序序列化。给定树的根结点root,请返回二叉树序列化后的字符串。我的原创 2017-08-29 17:13:43 · 316 阅读 · 0 评论 -
递归二叉树的序列打印、非递归二叉树的序列打印
递归二叉树的序列打印非递归二叉树的序列打印递归二叉树的序列打印请用递归方式实现二叉树的先序、中序和后序的遍历打印。给定一个二叉树的根结点root,请依次返回二叉树的先序,中序和后续遍历(二维数组的形式)。我的提交# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x#原创 2017-08-29 16:32:23 · 594 阅读 · 0 评论 -
最左原位、完全二叉树计数、快速N次方
最左原位完全二叉树计数最左原位有一个有序数组arr,其中不含有重复元素,请找到满足arr[i]==i条件的最左的位置。如果所有位置上的数都不满足条件,返回-1。给定有序数组arr及它的大小n,请返回所求值。测试样例:[-1,0,2,3],4返回:2我的提交# -*- coding:utf-8 -*-class Find: def findPos(self, arr, n):原创 2017-08-29 11:59:07 · 460 阅读 · 0 评论 -
局部最小值位置、元素最左出现、循环有序数组最小值
局部最小值位置元素最左出现循环有序数组最小值局部最小值位置定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果arr[0]public class Solution { public int getLessIndex(int[] arr) { if (arr == null || arr.length == 0) {原创 2017-08-28 22:52:36 · 1660 阅读 · 0 评论 -
有序数组合并
有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B。请编写一个方法,将B合并入A并排序。给定两个有序int数组A和B,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组我的提交# -*- coding:utf-8 -*-class Merge: def mergeAB(self, A, B, n, m): # writ原创 2017-08-24 16:08:23 · 396 阅读 · 0 评论 -
重复值判断
请设计一个高效算法,判断数组中是否有重复值。必须保证额外空间复杂度为O(1)。给定一个int数组A及它的大小n,请返回它是否有重复值。# 测试样例:[1,2,3,4,5,5,6],7返回:true我的提交# -*- coding:utf-8 -*-class Checker: def checkDuplicate(self, a, n): # write code he原创 2017-08-24 15:42:28 · 556 阅读 · 0 评论 -
交换、比较
交换比较交换请编写一个算法,不用任何额外变量交换两个整数的值。给定一个数组num,其中包含两个值,请不用任何额外变量交换这两个值,并将交换后的数组返回。测试样例: [1,2] 返回:[2,1]# -*- coding:utf-8 -*-class Swap: def getSwap(self, num): # write code here num[0]原创 2017-09-02 23:51:00 · 451 阅读 · 0 评论 -
站队问题、分糖果问题
站队问题分糖果站队问题n个人站队,他们的编号依次从1到n,要求编号为a的人必须在编号为b的人的左边,但不要求一定相邻,请问共有多少种排法?第二问如果要求a必须在b的左边,并且一定要相邻,请问一共有多少种排法?给定人数n及两个人的编号a和b,请返回一个两个元素的数组,其中两个元素依次为两个问题的答案。保证人数小于等于10。测试样例: 7,1,2 返回:[2520,720]我的提交# -*- co原创 2017-09-03 10:39:26 · 903 阅读 · 0 评论 -
2_Add Two Numbers
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it原创 2017-07-25 10:05:50 · 384 阅读 · 0 评论 -
二维数组的查找
牛客网《剑指offer》 https://www.nowcoder.com/ta/coding-interviews 时间限制:1秒 空间限制:32768K 热度指数:423031 本题知识点:查找题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路来自原创 2017-09-11 22:49:34 · 376 阅读 · 0 评论 -
替换空格
牛客网 《剑指offer》 时间限制:1秒 空间限制:32768K 热度指数:378402 本题知识点: 字符串题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路 参考别人的Python实现 https://github.com/Jack-Lee-Hi原创 2017-09-12 10:28:31 · 312 阅读 · 0 评论 -
从头到尾打印链表
牛客网 《剑指offer》时间限制:1秒 空间限制:32768K 热度指数:327472 本题知识点: 链表解题思路我们的第一反映是将链表指针反向,然后再从头到尾输出结点的值,再把指针返回来但是,这样就改变了原来链表的结构!是否允许这样需要问清楚面试官。通常打印是一个只读操作。另一种思路:我们的输出是先进后出,所以可以用栈来实现,而递归是一种栈,所以也可以用递归来做。python# -*- co原创 2017-09-12 11:18:13 · 540 阅读 · 0 评论 -
重建二叉树
牛客网 《剑指offer》时间限制:1秒 空间限制:32768K 热度指数:220072题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路前序遍历的第一个结点为根节点中序遍历的根结点的左边为左子树,原创 2017-09-12 12:32:49 · 296 阅读 · 0 评论 -
用两个栈实现队列
牛客网 《剑指offer》时间限制:1秒 空间限制:32768K 热度指数:145526 本题知识点: 队列 栈题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路队列经过一个栈,将反序输出,输出的队列再经过一个栈,又一次反序,变回了原来的顺序注意:当要把第一个栈的元素弹出转移到第二个栈时,必须把第一个栈此时所有的元素都弹出,否则会乱序程序# -*原创 2017-09-12 12:52:04 · 330 阅读 · 0 评论 -
旋转数组的最小数字
时间限制:3秒 空间限制:32768K 热度指数:199704 本题知识点: 查找题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。程序 https://git原创 2017-09-12 15:10:30 · 345 阅读 · 0 评论 -
斐波那契数
牛客网 《剑指offer》时间限制:1秒 空间限制:32768K 热度指数:199742解题思路一: 如果像这样,将会有大量的计算是重复的,时空复杂度过大 二: 可以考虑将计算过的结果缓存起来,如果发现一个 n 已经计算过了,就不再重复计算三: 非递归解法,即从下往上算 首先根据 f(0)和 f(1) 算出 f(2),再根据f(1) 和 f(2)算出f(3)。。。以此类推python 2原创 2017-09-12 16:07:16 · 741 阅读 · 0 评论 -
小范围排序
已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。给定一个int数组A,同时给定A的大小n和题意中的k,请返回排序后的数组。# 测试样例:[2,1,4,3,6,5,8,7,10,9],10,2返回:[1,2,3,4,5,6,7,8,9,10]我的提交 (照着参考答案改的,结果显原创 2017-08-24 15:33:35 · 198 阅读 · 0 评论 -
有环单链表相交判断、单链表相交判断
有环单链表相交判断单链表相交判断有环单链表相交判断如何判断两个有环单链表是否相交?相交的话返回第一个相交的节点,不相交的话返回空。如果两个链表长度分别为N和M,请做到时间复杂度O(N+M),额外空间复杂度O(1)。给定两个链表的头结点head1和head2(注意,另外两个参数adjust0和adjust1用于调整数据,与本题求解无关)。请返回一个bool值代表它们是否相交。我的提交 (这题意描述原创 2017-08-28 16:54:26 · 351 阅读 · 0 评论 -
复杂链表的复制、链表判环、无环单链表判相交
复杂链表的复制链表判环无环单链表判相交复杂链表的复制输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)我的提交# -*- coding:utf-8 -*-# class RandomListNode:# def __init__(self, x):# self.label = x# self.原创 2017-08-28 14:45:24 · 438 阅读 · 0 评论 -
链表指定值清除、链表的回文结构
链表指定值清除现在有一个单链表。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉。给定一个单链表的头结点head,同时给定一个值val,请返回清除后的链表的头结点,保证链表中有不等于该值的其它值。请保证其他元素的相对顺序。# 测试样例:{1,2,3,4,3,2,1},2{1,3,4,3,1}我的提交# -*- coding:utf-8 -*-# class ListN原创 2017-08-28 10:28:47 · 318 阅读 · 0 评论 -
二叉树打印
题目有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。我的提交:# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# se原创 2017-08-23 18:25:14 · 398 阅读 · 0 评论 -
栈的反转、滑动窗口、数组变树
滑动窗口有一个整型数组 arr 和一个大小为 w 的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。 返回一个长度为n-w+1的数组res,res[i]表示每一种窗口状态下的最大值。 以数组为[4,3,5,4,3,3,6,7],w=3为例。因为第一个窗口[4,3,5]的最大值为5,第二个窗口[3,5,4]的最大值为5,第三个窗口[5,4,3]的最大值为5。第四个窗口[4,3,3]的最大原创 2017-08-25 13:18:26 · 269 阅读 · 0 评论 -
访问单个节点的删除、链表的分化、打印两个链表的公共值
访问单个节点的删除实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。给定带删除的头节点和要删除的数字,请执行删除操作,返回删除后的头结点。链表中没有重复数字我的提交 (是我理解错题意了???)# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x#原创 2017-08-25 16:12:29 · 288 阅读 · 0 评论 -
相邻两数最大差值
有一个整形数组A,请设计一个复杂度为O(n)的算法,算出排序后相邻两数的最大差值。给定一个int数组A和A的大小n,请返回最大的差值。保证数组元素多于1个。# 测试样例:[1,2,5,4,6],5返回:2我的提交# -*- coding:utf-8 -*-class Gap: def maxGap(self, A, n): # write cod原创 2017-08-25 01:03:50 · 915 阅读 · 0 评论 -
最短子数组
对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。# 测试样例:[1,4,6,5,9,10],6返回:2 解题参考 :http://blog.csdn.net/u010033948/article/details/51396354原创 2017-08-25 01:03:12 · 450 阅读 · 0 评论 -
栈、队列(1)
目录可查询最值的栈双栈队列栈的反转双栈排序可查询最值的栈定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。我的提交# -*- coding:utf-8 -*-class Solution: def __init__(self): self.stack = [] self.minStack = [] def push(self原创 2017-08-25 01:01:47 · 306 阅读 · 0 评论 -
有序矩阵查找
现在有一个行和列都排好序的矩阵,请设计一个高效算法,快速查找矩阵中是否含有值x。给定一个int矩阵mat,同时给定矩阵大小nxm及待查找的数x,请返回一个bool值,代表矩阵中是否存在x。所有矩阵中数字及x均为int范围内整数。保证n和m均小于等于1000。测试样例:[[1,2,3],[4,5,6],[7,8,9]],3,3,10返回:false我的提交# -*- coding:utf-8 -*原创 2017-08-24 17:05:53 · 629 阅读 · 0 评论 -
两串旋转
如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A=”12345”,A的旋转词有”12345”,”23451”,”34512”,”45123”和”51234”。对于两个字符串A和B,请判断A和B是否互为旋转词。给定两个字符串A和B及他们的长度lena,lenb,请返回一个bool值,代表他们是否互为旋转词。# 测试样例:"cdab",4,"abcd",4# 返原创 2017-08-23 21:54:52 · 256 阅读 · 0 评论 -
冒泡排序
对于一个int数组,请编写一个冒泡排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。 # 测试样例:[1,2,3,5,2,3],6[1,2,2,3,3,5]我的提交# -*- coding:utf-8 -*-class BubbleSort: def bubbleSort(self, A, n): # write code here原创 2017-08-23 22:35:41 · 195 阅读 · 0 评论 -
基数排序
对于一个int数组,请编写一个基数排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。保证元素均小于等于2000。测试样例:[1,2,3,5,2,3],6[1,2,2,3,3,5]我的提交# -*- coding:utf-8 -*-class RadixSort: def radixSort(self, A, n): # write code原创 2017-08-24 12:18:27 · 240 阅读 · 0 评论 -
计数排序
对于一个int数组,请编写一个计数排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。# 测试样例:[1,2,3,5,2,3],6[1,2,2,3,3,5]我的提交# -*- coding:utf-8 -*-class CountingSort: def countingSort(self, A, n): # write code here原创 2017-08-24 11:42:48 · 258 阅读 · 0 评论 -
希尔排序
对于一个int数组,请编写一个希尔排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。保证元素小于等于2000。# 测试样例:[1,2,3,5,2,3],6[1,2,2,3,3,5]我的提交# -*- coding:utf-8 -*-class ShellSort: def shellSort(self, A, n): # write cod原创 2017-08-24 11:05:13 · 204 阅读 · 0 评论 -
堆排序
对于一个int数组,请编写一个堆排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。# 测试样例:[1,2,3,5,2,3],6[1,2,2,3,3,5] 参考文档:堆排序 http://www.cnblogs.com/dolphin0520/archive/2011/10/06/2199741.html我的提交# -*- coding:utf-8 -*原创 2017-08-24 10:20:38 · 173 阅读 · 0 评论 -
快速排序
对于一个int数组,请编写一个快速排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。# 测试样例:[1,2,3,5,2,3],6[1,2,2,3,3,5]我的提交# -*- coding:utf-8 -*-class QuickSort: def quickSort(self, A, n): # write code here原创 2017-08-24 01:40:53 · 260 阅读 · 0 评论 -
归并排序
对于一个int数组,请编写一个归并排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。# 测试样例:[1,2,3,5,2,3],6[1,2,2,3,3,5]我的提交# -*- coding:utf-8 -*-class MergeSort: def mergeSort(self, A, n): # write code here原创 2017-08-23 23:47:57 · 175 阅读 · 0 评论 -
插入排序
对于一个int数组,请编写一个插入排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。# 测试样例:[1,2,3,5,2,3],6[1,2,2,3,3,5]我的提交# -*- coding:utf-8 -*-class InsertionSort: def insertionSort(self, A, n): # write code her原创 2017-08-23 23:26:20 · 191 阅读 · 0 评论 -
选择排序
对于一个int数组,请编写一个选择排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。测试样例:[1,2,3,5,2,3],6[1,2,2,3,3,5]我的提交# -*- coding:utf-8 -*-class SelectionSort: def selectionSort(self, A, n): # write code here原创 2017-08-23 22:52:17 · 215 阅读 · 0 评论