数据结构与算法
珑志凤
这个作者很懒,什么都没留下…
展开
-
判断一个二叉树是否是平衡二叉树
题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。平衡二叉树(AVL):它又称为AVL树,它是一棵空树或者它的左右子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。public class BalanceTree { // 是否为平衡二叉树 static boolean isBalanced = true; private static in...原创 2019-12-19 09:48:35 · 338 阅读 · 0 评论 -
数组中出现次数最多的数字
public class MoreThanHalfSize { public static int[] array = {3, 2, 5, 2, 2, 2, 6, 7, 2}; /** * 方法四: * <p> * 思想:将一个目标元素和一个其它元素进行抵消,由于目标元素的数量大于其它元素的数量,故经过多次抵消后,剩下的元素即...原创 2019-11-29 09:27:43 · 1274 阅读 · 0 评论 -
数字在排序数组中出现的次数
题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{1, 2, 3, 3, 3, 3, 4, 5}和数字3,由于3在这个数组中出现了4次,因此输出4。public class Offer39 { //找出第一个k的位置 private int getFirstK(int nums[], int k, int start, int end) { if ...原创 2019-11-26 17:14:56 · 202 阅读 · 0 评论 -
数组中数值和下标相等的元素
题目描述:假设一个单调递增的数组里的每个元素都是整数且是唯一的,请编程实现一个函数,找出数组中任意一个数值等于其下标的元素,例如,在数组{-3,-1,1,3,5}中数字3和它的下标相同。public class Offer39 { public static void main(String[] args) { int[] nums = {-3, -1, 1, 3,...原创 2019-11-26 15:45:53 · 181 阅读 · 0 评论 -
合成两个排序的链表(25)
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。public class Offer25 { public static Node25 Merge(Node25 list1, Node25 list2) { Node25 head; if (list1 == null) { return list2; } ...原创 2019-11-22 15:18:11 · 96 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面21
题目:输入一个整数数组,实现一个函数来调整数组顺序使奇数位于数组前半部分,偶数位于数组后半部分。public class ReorderOddEven { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5, 2, 3, 5, 4, 6, 7, 9, 11, 12}; reorder(a...原创 2019-11-15 11:45:44 · 101 阅读 · 0 评论 -
二叉树的下一个节点8
题目描述:给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别别指向左右子节点的指针,还有一个指向父节点的指针例如:这棵树的中序遍历是:D,B,H,E,I,A,F,C,G解题思路:(1)当节点的右子树不为空:节点的下一个节点就是这个节点的右子树中的最左子节点,也就是从右子节点出发一直沿着指向左子节点的指针,走到最后一个叶子节点就是此节点的下一个...原创 2019-09-03 08:44:58 · 114 阅读 · 0 评论 -
用两个栈实现一个队列与用两个队列实现一个栈9
用两个栈实现一个队列public class Offer9 { public static void main(String[] args) { CustomQueue<Integer> customQueue = new CustomQueue(); customQueue.add(0); customQueue.ad...原创 2019-09-03 13:20:02 · 124 阅读 · 0 评论 -
斐波那契数列10
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。斐波那契数列属于经典的递归问题,对于这题的求解,我们首先要知道斐波那契数列的状态转移式,即f[n]=f[n-1]+f[n-2],且在n=1或2时,f[n]=1。public static int feibolaqiByCircle(int n) { if (n < 0)...原创 2019-09-06 10:12:04 · 585 阅读 · 0 评论 -
旋转数组的最小数字11
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。public static void main(String[] args) { int[] array = {3, 4, 5, 1, 2}; ...原创 2019-09-10 17:19:15 · 87 阅读 · 0 评论 -
数值的整数次方16
题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。public static double powerWithExponent(double base, int exponent) { if (exponent == 0) { return 1; ...原创 2019-09-27 08:59:49 · 177 阅读 · 0 评论 -
删除链表中重复的结点18
题目描述:删除有序链表中的重复节点,返回头节点,例如1->1->2->2->3->4,返回3->4public class Offer18 { public static void main(String[] args) { ListNode node1 = new ListNode(1); ListNode ...原创 2019-10-08 13:42:08 · 125 阅读 · 0 评论 -
二维数组中的查找4
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public static boolean Find_2(int target, int[][] array) { if (array == null || array.length == 0 || (...原创 2019-08-28 18:55:03 · 108 阅读 · 0 评论 -
不修改数组找出重复的数字
题目:在一个长度为n+1的数组里的所有数字都在1到n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2, 3, 5, 4, 3, 2, 6, 7},那么对应的输出是重复的数字2或者3。思路1:我们开辟一个新的数组,初始化为0,然后把原始数组每个数据的值作为下标,把新数组通过这个下标数据取出来,如果取出来是1,就...原创 2019-08-27 10:58:22 · 149 阅读 · 0 评论 -
快速排序
思路1:import java.util.Arrays;public class QuickSortTest { public static void main(String[] args) { int arr[] = {-9, 78, 23, -567, 0, 70, -1, 900, 4561}; System.out.println("...原创 2019-08-02 15:16:31 · 373 阅读 · 0 评论 -
数据结构与算法(1)-直接插入排序
public static void main(String[] args) { int[] a = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 1 }; System.out.println(Arrays.toString(a)); for (int i = 1; i < a.length; i++) { int...原创 2019-02-19 17:59:22 · 147 阅读 · 0 评论 -
数据结构与算法(2)-直接选择排序
public static void main(String[] args) { int[] a = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 1, 8 }; System.out.println("排序之前:"+Arrays.toString(a)); // 直接选择排序 for (int i = 0; i < a...原创 2019-02-20 14:13:39 · 147 阅读 · 0 评论 -
top k
问题:从arr[1, n]这n个数中,找出最大的k个数,这就是经典的TopK问题。1、Java基于TreeSet实现public static void main(String[] args) throws Exception, RemoteException { int[] a = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, ...原创 2019-03-14 18:09:22 · 214 阅读 · 0 评论 -
字符串反转
描述:字符串反转,即把字符串"abcd"变为"dcba"public static void main(String[] args) { String str = "abc"; System.out.println(reverse6(str)); } public static String reverse6(String str) { int len = str.leng...原创 2019-03-15 14:34:21 · 193 阅读 · 0 评论 -
数组和LinkedList反转
由于数组和LinkedList数据结构不同,所以采用了不同的算法。/** * @Title: reverseList * @Description: LinkedList反转 * @param list * @return 参数 * @throws */ public static LinkedList<Integer> rever...原创 2019-03-15 15:56:12 · 560 阅读 · 0 评论 -
数组中重复的数字
问题:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。public static void main(String[] args) { int[] array = { 6, 3, 1, 0, 2, 5, 3 }; duplicateNumber(array, arr...原创 2019-03-20 16:21:26 · 104 阅读 · 0 评论 -
递归
何时使用递归一、算法说明递归来源于数学中的归纳法,归纳法是数学里的一种证明方法,它通常有以下两个步骤:证明当 n 等于某一个值(通常是限定范围内的第一个值)时命题成立;假设当 n = m 时命题成立,证明当 n = m + 1 时命题也成立。数学中的归纳法由已知推向未知由前推向后,而在编程中通常是给定 n 的值(如 n = m)求结果,这与数学中的归纳法在过...转载 2019-03-12 18:55:23 · 236 阅读 · 0 评论 -
单链表反转
要求很简单,输入一个链表,反转链表后,输出新链表的表头。 反转链表是有2种方法(递归法,遍历法)实现的,面试官最爱考察的算法无非是斐波那契数列和单链表反转,递归方法实现链表反转比较优雅,但是对于不了解递归的同学来说还是有理解难度的。递归法总体来说,递归法是从最后一个Node开始,在弹栈的过程中将指针顺序置换的。为了方便理解,我们以 1->2->3->4...转载 2019-04-25 13:35:21 · 154 阅读 · 0 评论 -
递归-跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解法一:使用循环的方法public static int test(int number) { int a = 1; int b = 2; int c = 0; if (number == 0) { return...原创 2019-05-25 16:30:59 · 208 阅读 · 0 评论 -
归并排序
基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方...转载 2019-05-28 16:38:20 · 84 阅读 · 0 评论 -
单链表反转
Nodeclass Node { private int Data;// 数据域 private Node Next;// 指针域【链域】,存储下一个节点 public Node(int Data) { this.Data = Data; } public int getData() { return ...原创 2019-06-24 17:13:02 · 109 阅读 · 0 评论 -
希尔排序-老韩图解
package com.atguigu.sort;import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Date;public class ShellSort { public static void main(String[] args) { //int[] ar...原创 2019-07-13 15:36:22 · 298 阅读 · 0 评论 -
Java常用的八种排序算法与代码实现
Java常用的八种排序算法与代码实现 排序问题一直是程序员工作与面试的重点,今天特意整理研究下与大家共勉!这里列出8种常见的经典排序,基本涵盖了所有的排序算法。1.直接插入排序 我们经常会到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成...转载 2019-02-18 13:49:51 · 137 阅读 · 0 评论