随笔分类 - 数据结构与算法
摘要:import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.TreeMap; public class HashAndTree { public static void main
阅读全文
摘要:题目描述: 输入一个链表,输出该链表中倒数第k个结点。 题目链接:https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&&tqId=11167&rp=1&ru=/ta/coding-interviews&
阅读全文
摘要:题目描述:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 题目链接:https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993?tpId=13&&tqId=11185&rp=1&
阅读全文
摘要:定义节点: class DoubleNode{ int value; String name; DoubleNode next; DoubleNode pre; public DoubleNode(int value, String name) { this.value = value; this.
阅读全文
摘要:定义节点: class Node{ int value; Node next; public Node(int value ){ this.value = value; } @Override public String toString() { return "Node{" + "value="
阅读全文
摘要:反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 解题思路:双指针迭代。(如图head节点当成链表的第一个节点就好了,画的时候想的还不够清楚) 实现代码: //双指针迭代法 public ListNode reverseList
阅读全文
摘要:打印链表的有效节点:就是链表的长度呗,从头结点开始遍历,下一个节点不是null就计数器加1 public int getLength(Node head){ Node temp = head; int length = 0; if (head.next == null){ System.out.pr
阅读全文
摘要:首先是leetcode原题题目: 给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠,将它们合并为 [1,6]. 示例 2: 输入:
阅读全文
摘要:基数排序的使用条件要保证数据是十进制的数(否则需要自己改写基数排序) 图解过程如下: 代码挺不好理解的,实在理解不了用队列来写(我觉得我用不了多久就忘了) public static void radixSort(int[] arr) { if (arr == null || arr.length
阅读全文
摘要:桶排序的思想就是把数据放入到多个桶里面,在对桶里面的数据进行排序。 之前学过的排序(冒泡、选择、快排、堆排、归并)都是基于比较之间的排序,而桶排序不是基于比较的排序。 比如计数排序,顾名思义就是统计一个数字出现的次数,用一个桶来记录每一个数字出现的次数,最后再将桶由指定的顺序将数字取出。 计数排序时
阅读全文
摘要:随机在数组范围中找一个“基准值”,并将其与数组最右元素交换作为基准。 与此“基准值”进行比较就可以得到三个区域:小于,等于,大于。递归此过程就可以将数组排好序。 时间复杂度:由于随机选取一个数,那么每个数的概率就是 1/N ,拿到的这个数有可能构成最好情况,有可能构成不好不坏的情况,有可能构成最差情
阅读全文
摘要:给定一个数组ar,和一个数num,请把小于num的数放在数组的左边,等于num的数放数组的中间,大于num的数放在数组的右边。要求额外空间复杂度O(1),时间复杂度O(N)额外空间复杂度为O(1),不能开辟另一个数组。 过程图解: public class NetherLandsFlag { pub
阅读全文
摘要:堆结构的概念:堆就是一个数组,它可以以完全二叉树的形式表现出来。 大根堆:完全二叉树中每棵子树的最大值都在顶部就是大根堆 如何实现大根堆?堆操作之heapInsert heapInsert方法来实现将数组“上浮”调整成大根堆。 public static void heapInsert(int[]
阅读全文
摘要:题目描述: 小易有一个长度为n的整数序列,a_1,...,a_n。然后考虑在一个空序列b上进行n次以下操作:1、将a_i放入b序列的末尾2、逆置b序列小易需要你计算输出操作n次之后的b序列。 解题过程: 代码: import java.util.Scanner; public class Main
阅读全文
摘要:题目链接:https://www.nowcoder.com/practice/94a4d381a68b47b7a8bed86f2975db46?tpId=13&&tqId=11204&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/qu
阅读全文
摘要:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 算法思路: 将数组分成子数组,使左右数组均有序、如果左数组中一元素大于右数组某一元素,说明左数组其余元素都大于右数组的当前元素,此时产生左数组剩下元素数量的逆序对。 当左数组
阅读全文
摘要:在一个数组中,每一个数左边的数比当前数小的累加起来,叫做这个数组的小和 举例: [1,3,4,2,5]1左边比1小的数:没有3左边比3小的数:14左边比4小的数:1,32左边比2小的数:15左边比5小的数:1,3,4,2所以小和为1+1+3+1+1+3+4+2=16 解题思路:分治思想、归并 将一个
阅读全文
摘要:import java.util.Scanner; /* 输入整型数组和排序标识,对其元素按照升序或降序进行排序 int iSortFlag:排序标识:0表示按升序,1表示按降序 */ public class Homework_1 { static int flag; public static
阅读全文
摘要:public class MergeSort { public static void mergeSort(int[] arr) { //排序算法边界判断 if (arr == null || arr.length < 2) { return; } process(arr, 0, arr.lengt
阅读全文
摘要:递归写法: public class Homework3 { public int Fibonacci(int n) { if (n == 0) { return 0; } if (n == 1) { return 1; } return Fibonacci(n-1)+Fibonacci(n-2);
阅读全文