![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
|Ringleader|
对游戏非常感兴趣的前Java后端程序员。
记录学习Unity过程,一步一个脚印成为游戏开发大佬,做出我心中的游戏,完成我的小说。
感兴趣的不妨关注一波。
展开
-
java算法-堆-二叉堆、堆排序
堆二叉堆堆排序PriorityQueue二叉堆二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树)。二叉堆有两种:最大堆(Max Heap)和最小堆(Min Heap)。最大堆:父结点的键值总是大于或等于任何一个子节点的键值;最小堆:父结点的键值总是小于或等于任何一个子节点的键值。二叉堆=完全二叉树+排序规则(大顶/小顶规则)。大顶规则:任意父节点值>=子节点值;小顶规则:任意父节点值<=子节点值。所以根节点是整棵树的最大值或最小值。下图展示最大堆(大根堆、大顶原创 2020-07-22 22:43:37 · 197 阅读 · 0 评论 -
java算法-快排-快排的三种方式(单向、双向、三区、非递归、快排稳定化实现、螺母螺丝问题)
快排单向双向三路划分快排非递归形式快排稳定化快排稳定化2螺丝与螺帽问题单向代码: private int partition(int[] arr, int L, int R){ //随机基准值 int randomIndex = new Random().nextInt(R-L+1)+L; swap(arr,L,randomIndex); int pivot = arr[L]; int lt = L;原创 2020-07-21 17:34:55 · 1445 阅读 · 0 评论 -
java算法-排序-快排
快排快排思想:从序列中挑选出一个元素(一般是第一个或者是最后一个)作为"基准"元素把序列分成2个部分,其数值大于"基准"元素的元素放在"基准"元素的右边,否在放在"基准"元素的左边,此时"基准"元素所在的位置就是正确的排序位置,这个过程被称为 partition(分区)递归将"基准"元素左边的序列和"基准"元素右边的序列进行partition操作其中partiton即划分,方法有交换法和挖坑填数法法一:分治+挖坑填数代码: 包括合并形式和分开形式 public int[] sor原创 2020-07-20 23:14:55 · 139 阅读 · 0 评论 -
java算法-树-树的常见题目
树的构造105. 从前序与中序遍历序列构造二叉树106. 从中序与后序遍历序列构造二叉树105. 从前序与中序遍历序列构造二叉树思路:先序遍历的顺序是根节点,左子树,右子树。中序遍历的顺序是左子树,根节点,右子树。所以我们只需要根据先序遍历得到根节点,然后在中序遍历中找到根节点的位置,它的左边就是左子树的节点,右边就是右子树的节点。生成左子树和右子树就可以递归的进行了。事实上,我们不需要真的把 preorder 和 inorder 切分了,只需要用分别用两个指针指向开头和结束位置即可。注意下边原创 2020-07-19 15:28:39 · 641 阅读 · 0 评论 -
java算法-树-二叉树的遍历(前中后层序,递归、栈、moris)
树的遍历前言94. 二叉树的中序遍历144. 二叉树的前序遍历145. 二叉树的后序遍历102. 二叉树的层序遍历前言94. 二叉树的中序遍历给定一个二叉树,返回它的中序 遍历。方法一:递归/**递归*/ /**递归*/ public List<Integer> inorderTraversal_recurse(TreeNode root) { List<Integer> list = new ArrayList<>();原创 2020-07-15 23:13:44 · 148 阅读 · 0 评论 -
java算法-链表(链表翻转3题、迭代递归方法)
92. 反转链表 II思路:迭代法代码:public ListNode reverseBetween(ListNode head, int m, int n) { if (head == null) return head; ListNode dumnHead = new ListNode(0); dumnHead.next = head; int cnt = 0; ListNode pre = dumnHead;原创 2020-07-15 10:58:06 · 310 阅读 · 0 评论 -
java算法-回溯
46. 全排列解题:public List<List<Integer>> permute(int[] nums) { List<List<Integer>> res = new ArrayList<>(); backTracing(res,new ArrayList<Integer>(),nums); return res; } private void backT原创 2020-07-05 21:45:12 · 203 阅读 · 0 评论 -
java算法-动态规划股票问题(一套公式秒杀6种问题)
参考:团灭 LeetCode 股票买卖问题-labuladong股票问题dp[i][k][0] 定义:第i天,手上不持有股票,至今至多进行k次交易状态转移方程:dp[i][k][0] = Math.max(dp[i-1][k][0],dp[i-1][k][1]+prices[i]);dp[i][k][1] = Math.max(dp[i-1][k][1],dp[i-1][k-1][0]-prices[i]);base casedp[-1][k][0] = 0;//解释:因为 i 是从 .原创 2020-07-05 21:41:44 · 1205 阅读 · 0 评论 -
java算法-位运算
136. 只出现一次的数字解答:/** * 异或运算有以下三个性质: * * ·任何数和 0做异或运算,结果仍然是原来的数,即 a ⊕ 0 = a。 * ·任何数和其自身做异或运算,结果是 0,即 a ⊕ a = 0。 * ·异或运算满足交换律和结合律,即 a⊕b⊕a = b⊕a⊕a = b⊕(a⊕a) = b⊕0 = b。 * * 利用上面的性质,假设数组中有 2m+1 个数,其中有 m 个数各出现两次,一个数出现一次,原创 2020-06-24 01:54:36 · 220 阅读 · 0 评论 -
算法-双指针(java)
leetcode 15. 三数之和解题:首先对数组进行排序,排序后固定一个数nums[i],再使用左右指针指向nums[i]后面的两端,数字分别为nums[ L]和nums[R],计算三个数的和sum判断是否满足为0,满足则添加进结果集如果nums[i]大于0,则三数之和必然无法等于0,结束循环如果nums[i]==nums[i-1],则说明该数字重复,会导致结果重复,所以应该跳过当sum==0时,nums[L]==nums[L-1]则会导致结果重复,应该跳过,L++当 sum ==0时原创 2020-06-24 01:55:11 · 956 阅读 · 0 评论 -
算法-单调栈(java)
套路: /** * 单调栈套路: * new Stack * for(遍历处理集){ * while(栈非空 && 达到预期条件){ * 出栈并处理,保存到结果集 * } * 入栈(栈中保存数组的索引) * } * while(栈非空){ * 出栈处原创 2020-06-12 16:20:02 · 1915 阅读 · 1 评论