算法
記憶的深藍
认证思考,对于复杂的东西,一定要通过画流程图理清楚
展开
-
算法-排序问题
1、冒泡排序 2、快速排序 3、堆排序 4、插入排序 5、线性时间排序原创 2020-05-23 08:25:53 · 218 阅读 · 0 评论 -
算法-从尾到头打印链表[简单]
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10000 分析: // 231 // 2 // 32 // 132 ···java public int[] reversePrint(ListNode head) { if (head == null) { return new int[0]; } int i = 1; int[] newi = new int[i]原创 2020-05-19 08:10:54 · 159 阅读 · 0 评论 -
如何遍历一棵二叉树?
private Object treeSearch(Tree tree, String key) { if (tree == null || tree.key == key) { return tree; } else if (tree.right >= key) { return treeSearch(tree.right, key); } else { return treeS.原创 2020-05-17 21:27:53 · 260 阅读 · 0 评论 -
算法题目-课程表2
课程表 现在你总共有 n 门课需要选,记为 0 到 n-1。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。 可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。 示例 1: 输入: 2, [[1,0]] 输出: [0,1] 解释: 总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为 [0,原创 2020-05-17 17:39:20 · 489 阅读 · 0 评论 -
Volatile关键字的作用?
1、内存可见性 2、防止指令冲排序原创 2020-05-14 07:32:06 · 170 阅读 · 0 评论 -
JAVA 实现算法 - 插入排序
// 插入排序 Integer[] s = new Integer[]{10, 7, 19, 3, 6, 46, null}; for (int j = 1; j &lt; s.length; j++) { Integer key = s[j]; int i = j - 1; while (i &gt;= 0 &amp;&amp; key != null &amp;&amp...原创 2019-01-28 10:39:10 · 132 阅读 · 0 评论 -
JAVA 实现算法 - 堆排序
这里的堆是堆数据结构,而不是java中的垃圾收集存储。 堆(二叉堆)是一个数组,可以被看成一个近似的完全二叉树。 二叉堆可以分为2种形式:最大堆、最小堆 最大堆 A[parent(i)] &gt;= A[i] 最小堆 A[parent(i)] &lt;= A[i] ...原创 2019-01-28 16:22:48 · 150 阅读 · 0 评论 -
JAVA 实现算法 -快速排序
一趟快速排序的算法是: 1)设置两个变量i、j,排序开始的时候:i=0,j=N-1; 2)以第一个数组元素作为关键数据,赋值给key,即key=A[0]; 3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]的值赋给A[i]; 4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]的值赋给A[j]; 5)重复第3、...原创 2019-01-29 10:15:17 · 146 阅读 · 0 评论