
算法学习
aiYouWei啊
你必须内心丰富才能改变这些生活表面的相似
展开
-
稀疏数组与数组的转换和文件读写
二维数组 转 稀疏数组的思路 遍历 原始的二维数组,得到有效数据的个数 sum 根据sum 就可以创建 稀疏数组 sparseArr int[sum + 1] [3] 将二维数组的有效数据数据存入到 稀疏数组 稀疏数组转原始的二维数组的思路 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的 chessArr2 = int [11][11] 在读取稀疏数...原创 2020-03-01 18:21:23 · 186 阅读 · 0 评论 -
基础算法:冒泡排序,插入排序,选择排序
冒泡排序算法 理解:冒泡排序譬如气泡从水里面出来时,越到水面上气泡就会变的越大.每一次遍历把大的数字往前排. 做法: 1.双层循环,第一层循环依次拿出每一个元素 2.第二层循环:将第一层拿出来的元素与数组中的每个元素相比较 3.如果前一个元素比后一个元素小,则交换位置 4.循环结束后,排序完成. 时间复杂度:O(n^2) public static void bubble...原创 2019-08-21 09:00:50 · 134 阅读 · 0 评论 -
归并排序+小和问题
归并排序 理解:用递归将每个分段有序,最后再使整体有序 时间复杂度:用递归树的方法解递归式T(n)=2T(n/2)+o(n),得时间复杂度是o(nlogn). public class MergeSort { public static void mergeSort(int[] arr) { if (arr == null || arr.length < 2) { retur...原创 2019-08-22 10:54:08 · 190 阅读 · 0 评论 -
堆排序算法的理解与实现
完全二叉树 对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 数组转完全二叉树 在不越界的情况下,位置i左孩子下标 2*i +1 在不越界的情况下,位置i右孩子下标 2*i + 2 在不越界的情况下,位置i的父节点(i-1)/2 大根堆 在一个树中,任何一个子树的最大值都是这个子树的头部 小根堆 在一个树中...原创 2019-08-29 10:09:28 · 104 阅读 · 0 评论 -
数组最大差值问题
给定一个数组,求如果排序之后,相邻两数的最大差值,要求时 间复杂度O(N),且要求不能用非基于比较的排序 public class MaxGap { public static int maxGap(int[] nums) { if (nums == null || nums.length < 2) { return 0; }...原创 2019-09-02 08:31:46 · 204 阅读 · 0 评论 -
用数组结构实现大小固定的队列和栈
数组实现固定大小的栈 思路:定义一个数组外加一个变量size,size变量的意义为记录当前栈存储元素的位置 public static class ArrayStack { private Integer[] array; private Integer size; public ArrayStack(int initSize) { ...原创 2019-09-03 21:05:54 · 226 阅读 · 0 评论 -
转圈打印矩阵和旋转正方形矩阵
转圈打印矩阵 转圈打印矩阵 【题目】 给定一个整型矩阵matrix,请按照转圈的方式打印它。 例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为: 1,2,3,4,8,12,16,15,14,13,9, 5,6,7,11, 10 【要求】 额外空间复杂度为O(1) 思路:首先打印外围框的元素,从左上角...原创 2019-09-06 08:51:09 · 183 阅读 · 0 评论