算法
Leven.
这个作者很懒,什么都没留下…
展开
-
二维数组的多种遍历方式
记录二维数组,即矩阵的多种遍历方式。有以下二维矩阵:1、沿对角线向右上角遍历如图方式遍历,沿对角线向右上角遍历。按遍历的下标依次是:第一轮遍历:(0,0),(1,1),(2,2),(3,3),(4,4)第二轮遍历:(0,1),(1,2),(2,3),(3,4)第三轮遍历:(0,2),(1,3),(2,4)第四轮遍历:(0,3),(1,4)第五轮遍历:(0,4)设遍历的轮次为i,且对于任意一个被遍历的元素下标为(k, j),从上述遍历顺序看,有 j in [i, param[0].le原创 2020-05-22 01:00:06 · 2801 阅读 · 0 评论 -
给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。
第一种class Solution { public int[] countBits(int num) { int[] a = new int[num+1]; for(int i=0;i<=num;i++){ a[i] = a[i >> 1] + (i&1); } ...原创 2019-10-17 14:52:38 · 1327 阅读 · 0 评论 -
【java】最大堆和最小堆的建立
最大堆public class MaxHeap { private static int size = 0; private void maxHeap(int k, Integer key, Integer[] array){ while (k > 0){ //父节点,即array的中点 int paren...原创 2019-10-06 03:43:14 · 714 阅读 · 0 评论 -
java实现最小栈
实现一个栈,该栈带有出栈(pop)、入栈(push)和取最小元素(getMin)3个方法。3个方法时间复杂度都是O(1)。以{4,9,7,3,8,5}入栈为例。下图两个栈,第一个栈stack1用来存储所有元素,第二栈stack2用来存储最小元素。对于入栈(push)操作,当第一个元素4入stack1栈时,同时入stack2栈。在后续元素入stack1时,与stack2的栈顶元素比较,若该元...原创 2019-08-22 23:52:28 · 162 阅读 · 0 评论 -
java实现判断一个数是否为2的整数次幂
给定一个正整数,判断它是不是2的整数次幂。某一正整数n是2的整数次幂时,二进制都是最高位为1,其余位都为0;原数值-1后二进制的所有位都为1。因此将n和n-1逻辑与后值为0。 private static boolean isPowerOfTwo(int n){ return (n & (n-1))==0; } public stati...原创 2019-08-22 22:34:09 · 1291 阅读 · 0 评论 -
java实现三种方式求最大公约数
/** * 欧几里得算法:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。 */ private static int gcdV1(int a,int b){ int big = a > b ? a : b; int small = a < b ? a : b; ...原创 2019-08-22 21:33:20 · 1304 阅读 · 1 评论 -
java实现判断链表有环
判断链表有环使用两个指针left和right指向起点,每次left指针向后走一步,right指针向后走两步,上图是两个指针走一次后的结果。直到left和right指针再次指向同一个节点,说明该链表是有环链表。 private static boolean isCycle(Node node){ if (node == null){ thr...原创 2019-08-22 17:34:39 · 348 阅读 · 0 评论 -
java实现希尔排序
希尔排序算法描述:将一个数据序列分成若干组,每组由若干相隔一段距离(称为增量delta)的元素组成,在一个组内采用直接插入排序算法进行排序。 增量delta初值通常为数据序列长度的一半,以后每趟增量减半,最后值为1。随着增量逐渐减小,组数也减少,组内元素个数增加,数据序列接近有序。例如:数组{38,55,65,97,27,76,28,13,19},初始增量delta为4,则{38,27...原创 2019-08-21 00:08:55 · 155 阅读 · 0 评论 -
java实现直接插入排序和二分法插入排序
直接插入排序:第i趟排序将第i+1个元素temp插入到0-i的有序序列当中。将temp与0-i个有序元素向前进行比较,当0-i有序元素中的第j个元素小于temp时,将第j+1至i个元素向后移动一位,同时将temp插入到j+1中。重复上述步骤i趟完成排序。 二分法插入排序:将上述temp与0-i个有序元素进行比较更改为使用二分查找找到temp插入的下标,减少比较次数,但移动次数不变。publi...原创 2019-08-20 21:17:12 · 287 阅读 · 0 评论 -
java实现“两个队列实现栈”
两个队列,inputQueue和outputQueue。其中inputQueue用于入栈操作时存放元素,outputQueue用于辅助出栈操作。例如,入栈元素01234,在inputQueue中存放01234,出栈时,将0123转移到outputQueue,此时inputQueue只剩元素4,4出栈后,将outputQueue中的0123在转移到inputQueue中。public cl...原创 2019-07-22 23:24:44 · 276 阅读 · 0 评论 -
java实现“用两个栈实现队列”
使用两个栈实现队列,并提供一个队列尾部插入节点和队列头部删除节点方法。两个栈,一个栈作为入列栈inputStack,一个栈作为出列栈outputStack。对于入列操作,直接将元素push到inputStack中。对于出列操作,outputStack存在元素时,outputStack直接pop;outputStack为空时,检查inputStack是否为空,inputStack...原创 2019-07-22 18:14:27 · 132 阅读 · 0 评论 -
java实现给定二叉树的某一个节点求的下一个节点
给定一棵二叉树和其中的一个结点,找出中序遍历序列的下一个节点。(树中的节点有指向左右子节点和父节点指针)。二叉树节点类public class TreeNode { private int item; private TreeNode left; private TreeNode right; private TreeNode parent; p...原创 2019-07-22 03:25:09 · 399 阅读 · 0 评论 -
java实现根据前序遍历和中序遍历重建二叉树
前序遍历:{1,2,4,7,3,5,6,8}中序遍历:{4,7,2,1,5,3,8,6}根据前序遍历第一个元素“1”,可以将中序遍历分成左右子树,左子树{4,7,2},右子树{5,3,8,6}。接着,根据前序遍历第二个元素“2”,将“1”的左子树{4,7,2}分为左子树{4,7},右子树{}。再根据前序遍历第三个元素“4”,将“2”的左子树{4,7}分为左子树{},右子树{7}。...原创 2019-07-22 03:14:25 · 713 阅读 · 0 评论 -
java实现旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,称之为数组的旋转。输入一个递增排序的数组的旋转,输出旋转数组的最小元素。例如,输入{3,4,5,1,2},输出1。array表示递增排序旋转数组,使用left和right指针分别代表数组的左边界和右边界,数组中间元素的下标mid = (left+right)/2。一个标准的递增排序旋转数组,总是有array[left] >= array[r...原创 2019-07-24 06:02:37 · 257 阅读 · 0 评论 -
java实现堆排序
public class HeapSort { /** * 采用最大堆升序排序数组 * @param array 已经构建好但未排序的二叉堆数组 * @param border 数组边界,此边界指向最想最后一个“删除”的数据 *(即在数组中最左侧的“删除”数据)。初始值为数组的长度length。 */ public static...原创 2019-07-15 04:04:23 · 100 阅读 · 0 评论 -
java实现冒泡排序
基础冒泡排序/** * 基础冒泡排序 * @param arrays 数组 * @return 返回排序后数组 */ public static int[] bubbleSort1(int[] arrays){ if (arrays == null){ return null; } ...原创 2019-07-15 01:12:48 · 94 阅读 · 0 评论 -
java实现快速排序
分别采用双边循环法和单边循环法实现快速排序public class QuickSort { /** * 双边循环法实现快速排序 * @param arrays 待排序数组 * @param left 需要排序数据左指针下标 * @param right 需要排序数据右指针下标 */ public static void qu...原创 2019-07-14 23:53:06 · 155 阅读 · 0 评论