算法
良辰美景莫虚设
菜鸟一枚
展开
-
每日算法-合并K个升序链表
LeetCode地址:https://leetcode-cn.com/problems/merge-k-sorted-lists/1、解题思路利用小顶堆实现,Java中利用PriorityQueue进行实现,下面是实现的图解2、实现代码import java.util.Comparator;import java.util.PriorityQueue;//leetcode原题地址:class Solution{ public class ListNode { int val原创 2021-01-23 11:00:07 · 135 阅读 · 2 评论 -
算法基础-归并排序
一、归并排序(merge sort)定义采用分治法去进行排序的一种方式。二、时间复杂度O(n log n) 此时间复杂度可根据上一篇文章三、利用递归方式实现 //归并排序 分而治之 public static void mergeSort(int[] arr){ if (arr == null || arr.length < 2) { return; } process(arr, 0, arr.length - 1); } public原创 2020-09-29 17:51:28 · 113 阅读 · 0 评论 -
算法基础-递归
一、何为递归在运行的过程中调用自己。即将一个大的问题拆分,再拆分,从而得到最后想要的结果。二、递归条件1. 子问题须与原始问题为同样的事,且更为简单;2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。三、实际问题及代码编写问题:求数组arr[L..R]中的最大值,怎么用递归方法实现。解决思路:1)将[L..R]范围分成左右两半。左:[L..Mid] 右[Mid+1..R]2)左部分求最大值,右部分求最大值3) [L..R]范围上的最大值,是max{左部分最大.原创 2020-09-28 11:58:36 · 76 阅读 · 0 评论 -
算法基础-栈和队列(怎么利用数组和链表实现)
一、逻辑概念栈:数据先进后出,犹如弹匣队列:数据先进先出,好似排队二、栈和队列的实现(自己实现)1、双向链表实现public static class Node<T> { public T value; public Node<T> last; public Node<T> next; public Node(T data) { value = data; } } //栈 队列 //双向链表的添加及弹出操作 p原创 2020-09-27 16:40:37 · 152 阅读 · 0 评论 -
算法基础-链表
一、链表主要分为单向链表和双向链表,下面用代码实现一下://单向链表public class Node { public int value; public Node next; public Node(int data) { value = data; }}//双向链表public class DoubleNode { public int value; public DoubleNode last; public原创 2020-09-21 21:25:32 · 73 阅读 · 0 评论 -
算法基础-认识异或运算
一、异或运算,同或运算 异或运算:相同为0,不同为1(无相位相加) 同或运算:相同以1,不同为0二、异或运算的一些性质 1)0^N == N N^N == 0 2)异或运算满足交换律和结合率三、实际问题(通过实际问题来认识异或运算)问题一、如何不用额外变量交换两个数(主要采用第一个性质) //如何不用额外变量交换两个数 public static void exchangeNum(){ int a = 3...原创 2020-09-18 12:45:09 · 630 阅读 · 0 评论