经典算法与数据结构
总结归纳常用的算法和数据结构,案例呈现相关代码的Java实现。
lxg2015
这个作者很懒,什么都没留下…
展开
-
双栈排序
请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。测试样例:[1,2,3,4,5]返回:[5,4,3,2,1]原创 2018-01-28 00:08:27 · 289 阅读 · 0 评论 -
二分查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public class Solution { public boolean Find(int target, int [][] array) { for(int i = 0 ; i < array.l原创 2017-06-20 18:16:41 · 211 阅读 · 0 评论 -
递归二叉树的序列打印
请用递归方式实现二叉树的先序、中序和后序的遍历打印。给定一个二叉树的根结点root,请依次返回二叉树的先序,中序和后续遍历(二维数组的形式)。import java.util.*;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null;原创 2017-06-06 09:46:05 · 682 阅读 · 0 评论 -
快速排序
import java.util.*; public class QuickSort { public int[] quickSort(int[] A, int n) { quickSortRecurrence(A, 0, n - 1); return A; } public void quickSortRecurre原创 2017-06-05 21:12:01 · 209 阅读 · 0 评论 -
[牛客]寻找奇数出现II练习题
给定一个整型数组arr,其中有两个数出现了奇数次,其他的数都出现了偶数次,找到这两个数。要求时间复杂度为O(N),额外空间复杂度为O(1)。给定一个整形数组arr及它的大小n,请返回一个数组,其中两个元素为两个出现了奇数次的元素,请将他们按从小到大排列。测试样例:[1,2,4,4,2,1,3,5],8返回:[3,5]1、右移运算符>>使指定值的所有位都右移规定的次数。右原创 2017-04-22 23:37:13 · 414 阅读 · 0 评论 -
[牛客]寻找奇数出现练习题
有一个整型数组A,其中只有一个数出现了奇数次,其他的数都出现了偶数次,请打印这个数。要求时间复杂度为O(N),额外空间复杂度为O(1)。给定整形数组A及它的大小n,请返回题目所求数字。测试样例:[1,2,3,2,1],5返回:3import java.util.*;public class OddAppearance { public int fin原创 2017-04-22 23:14:35 · 404 阅读 · 0 评论 -
[牛客]比较练习题
对于两个32位整数a和b,请设计一个算法返回a和b中较大的。但是不能用任何比较判断。若两数相同,返回任意一个。给定两个整数a和b,请返回较大的数。测试样例:1,2返回:2 import java.util.*;public class Compare { public int getMax(int a, int b) { int c =原创 2017-04-22 23:11:13 · 329 阅读 · 0 评论 -
[牛客]交换练习题
请编写一个算法,不用任何额外变量交换两个整数的值。给定一个数组num,其中包含两个值,请不用任何额外变量交换这两个值,并将交换后的数组返回。测试样例:[1,2]返回:[2,1]import java.util.*;public class Swap { public int[] getSwap(int[] num) { num[0]原创 2017-04-22 23:05:16 · 251 阅读 · 0 评论 -
问题记录(1)
原创 2017-04-22 22:56:44 · 276 阅读 · 0 评论 -
[牛客]访问单个节点的删除练习题
实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。给定带删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true import java.util.*;/*public class ListNode { int val; ListNode next = null; ListNode(int val) {原创 2017-04-21 11:36:32 · 622 阅读 · 0 评论 -
[牛客]合法括号序列判断练习题
对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。测试样例:"(()())",6返回:true测试样例:"()a()()",7返回:false测试样例:"()(()()",7返回:falseimport java.util.*;pu原创 2017-04-20 17:18:10 · 1405 阅读 · 0 评论 -
[牛客]空格替换练习题
请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。测试样例:"Mr John Smith”,13返回:"Mr%20John%20Smit原创 2017-04-20 17:01:59 · 305 阅读 · 0 评论 -
[牛客]拼接最小字典序练习题
对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的。给定一个字符串数组strs,同时给定它的大小,请返回拼接成的串。测试样例:["abc","de"],2"abcde"要比较两个字符串拼接之后的字典序。import java.util.*;public class Prior { public St原创 2017-04-20 16:49:52 · 541 阅读 · 0 评论 -
牛客网算法课程优惠码
报名牛客精品面试算法课,原价99元,专属优惠立减10元,一本书的价钱就能终身反复学习全网最超值的干货课程,包括十二章必备算法知识点及面试常考题,每课均有配套练习。听了之后感觉很不错,有需要的大家可以点下面的最新链接,自动应用优惠!互勉!专属优惠码:AimHCXC最新专属优惠购课链接:http://www.nowcoder.com/courses/1?coupon=AimHCXC原创 2017-04-20 16:20:04 · 2889 阅读 · 0 评论 -
[牛客]字符串移位练习题
对于一个字符串,请设计一个算法,将字符串的长度为len的前缀平移到字符串的最后。给定一个字符串A和它的长度,同时给定len,请返回平移后的字符串。测试样例:"ABCDE",5,3返回:"DEABC"import java.util.*;public class Translation { public String stringTranslation(S原创 2017-04-20 15:58:09 · 798 阅读 · 0 评论 -
[牛客]句子的逆序练习题
对于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成,你需要将这些部分逆序。给定一个原字符串A和他的长度,请返回逆序后的字符串。测试样例:"dog loves pig",13返回:"pig loves dog"import java.util.*;public class Reverse { char[原创 2017-04-20 15:43:32 · 388 阅读 · 0 评论 -
[牛客]双栈队列练习题
编写一个类,只能用两个栈结构实现队列,支持队列的基本操作(push,pop)。给定一个操作序列ope及它的长度n,其中元素为正数代表push操作,为0代表pop操作,保证操作序列合法且一定含pop操作,请返回pop的结果序列。测试样例:[1,2,3,0,4,0],6返回:[1,2]import java.util.*;public class TwoSt原创 2017-04-20 10:44:50 · 326 阅读 · 0 评论 -
[牛客]可查询最值的栈练习题
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。import java.util.Stack;public class Solution { Stack a = new Stack(); Stack b = new Stack(); public void push(int node) { a.push(node)原创 2017-04-20 10:06:35 · 1271 阅读 · 0 评论 -
[牛客]词语变形练习题
对于两个字符串A和B,如果A和B中出现的字符种类相同且每种字符出现的次数相同,则A和B互为变形词,请设计一个高效算法,检查两给定串是否互为变形词。给定两个字符串A和B及他们的长度,请返回一个bool值,代表他们是否互为变形词。测试样例:"abc",3,"bca",3返回:trueimport java.util.*;public class Transf原创 2017-04-20 09:41:42 · 621 阅读 · 0 评论 -
[牛客]拓扑结构相同子树练习题
对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树。import java.util.*;/*public class TreeNode { int val = 0; TreeNode left = null;原创 2017-04-19 23:04:58 · 320 阅读 · 0 评论 -
[牛客]插入排序练习题
对于一个int数组,请编写一个插入排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。测试样例:[1,2,3,5,2,3],6[1,2,2,3,3,5]import java.util.*;public class InsertionSort { public int[] insertionSort(int[]原创 2017-04-19 20:44:02 · 1170 阅读 · 0 评论 -
[牛客]两串旋转练习题
如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A="12345",A的旋转词有"12345","23451","34512","45123"和"51234"。对于两个字符串A和B,请判断A和B是否互为旋转词。给定两个字符串A和B及他们的长度lena,lenb,请返回一个bool值,代表他们是否互为旋转词。测试样例:"cdab",4,"abc原创 2017-04-19 14:38:56 · 269 阅读 · 0 评论 -
[牛客]有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。
import java.util.*;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/publ原创 2017-04-19 13:19:04 · 789 阅读 · 0 评论 -
必学经典算法之——堆排序
堆的定义n个元素的序列{k1,k2,k3, ... ,kn},当且仅当满足以下关系时,称之为堆。堆排序要点建堆:将n个元素建成堆。排序:输出堆顶元素后,调整剩余元素,使之成为大根堆;继续输>出堆顶,继续调整,依此类推。(一)筛选:调整堆使之成为大根堆或小根堆输出堆顶元素后,将堆底元素送入堆顶,由于根结点不满足堆的性质,此时堆被破坏,而根结点的左右子树仍然是堆。然后,将根结点与左右子树,较大或...原创 2018-05-15 23:28:44 · 414 阅读 · 0 评论 -
必学经典算法之——归并排序
定义归并排序是通过合并多个有序序列的排序方法,是运用分支法的典型范例。主要步骤划分:将待排序的序列划分为大小大致相等的两个子序列。治理:当子序列的规模大于1时,递归排序子序列,如果子序列规模为1则称为有序序列。组合:将两个有序序列合并为一个有序序列。时间和空间复杂度时间复杂度:O(nlogn)空间复杂度:O(n)代码实现public class MergeSort { public st...原创 2018-05-15 23:42:23 · 502 阅读 · 0 评论 -
必学经典算法之——冒泡排序
基本思想冒泡排序属于交换类排序,两两比较,而后交换。排序过程如下:首先对位置0~N的数据从左到右两两比较,大的放后面,经过一轮的操作,N位置存放的是最大的数字;之后对位置0~N-1的数据从左到右两两比较,大的放后面,经过一轮的操作,N-1位置存放的是最大的数字;以此类推。时间复杂度O(n^2)实例对于一个int数组,请编写一个冒泡排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回...原创 2017-04-19 15:00:52 · 477 阅读 · 0 评论 -
必学经典算法之——简单选择排序
基本思想选择排序属于选择类排序。排序过程如下:首先对位置0~N的数据从左到右取出最小(大)的,放在N位置上;之后对位置0~N-1的数据从左到右取出最小(大)的,放在N-1位置上;以此类推。时间复杂度O(n^2)实例对于一个int数组,请编写一个选择排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。测试样例:[1,2,3,5,2,3],6[1,2,2,3,3,5] p...原创 2017-04-19 20:25:44 · 806 阅读 · 0 评论