算法学习
良秋
wechat: ww286701853
展开
-
数据结构与算法LeetCode题目记录
链表206 反转链表141 环形链表21 合并两个有序链表19 删除链表的倒数第N个节点876 链表的中间结点栈20 有效的括号155 最小栈232 用栈实现队列844 比较含退格的字符串224 基本计算器682 棒球比赛496 下一个更大元素 I...原创 2019-10-14 12:20:22 · 196 阅读 · 0 评论 -
堆排序-java
堆排序-java转载请注明出处:思想: 前面的文章有选择排序,我们每次都要从剩余的数组中找出最小值,这样每次比较都会有重复的操作。 如果我们能记录下最小的值,将提高选择效率,从而提高算法的效率。 堆排序把待排序的数组转化为完全二叉树的结构,并按照层级关系对每个节点赋值下标。 其中涉及到了大顶堆和小顶堆的概念,即 完全二叉树的双亲节点与孩子之间的下标存在关系:如果几点i =原创 2016-02-22 20:40:23 · 752 阅读 · 0 评论 -
选择排序-java
选择排序-java转载请注明出处:http://blog.csdn.net/a740169405/article/details/50716196思路: 选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n - 1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。循环方式:/** * 选择排序(循环) *原创 2016-02-22 13:18:26 · 563 阅读 · 0 评论 -
单链表逆置-java(递归与非递归)
单链表逆置-java(递归与非递归)结点是一个自定义的类Node:private class Node { public int value; public Node nextNode; public Node(int value) { this.value = value; }}递归方法用的是栈的思想,想把头结点入栈,接着头结点的下一个结点入栈,直原创 2016-02-17 19:34:45 · 5330 阅读 · 0 评论 -
二分查找算法-java
二分查找算法-java题目: 在一个有序数组中查找给定值得下标其中有两个前提,一是顺序存储结构,二十存储结构已经是排好序的。给定前提:int[] array = new int[]{1, 3, 5, 12, 18, 23, 24, 50};int num = 50;int left = 0, right = array.length - 1;先看看直接用循环的方式:int index =原创 2016-02-17 13:44:39 · 966 阅读 · 0 评论 -
冒泡排序-java
冒泡排序-java转载请注明出处:http://blog.csdn.net/a740169405/article/details/50716134思想: 冒泡排序的思想是把小的数从后面一个一个的交换到前面,想水中的气泡一样一直往上冒:使用循环实现:/** * 使用循环的方式实现冒泡排序 */private static void bubbleSort(int[] arr) { i原创 2016-02-22 13:02:06 · 774 阅读 · 0 评论 -
快速排序-java
快速排序-java快速排序的思想是使用二分法,将比索引值小的值全部放在左侧,将比索引值大的值全部放在右侧。 之后再使用递归对左右两个区域重复上述动作,直到排序完成。递归方法:private static void quickSort(int[] array, int left, int right) { if (left >= right) { return; }原创 2016-02-25 20:34:52 · 804 阅读 · 0 评论 -
希尔排序-java
希尔排序-java转载请注明出处:思想: 希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小, 插入排序对于有序的序列效率很高。所以,希尔排序的时间复杂度会比O(n^2)好一些。 换个方式理解,就是每次都把数组分成多个小数组(虚拟的)小数组里的每个元素其实是大数组里跳跃一定维度的元素集合。循环实现原创 2016-02-22 18:24:06 · 1534 阅读 · 0 评论 -
直接插入排序-java
直接插入排序-java转载请注明出处:http://blog.csdn.net/a740169405/article/details/50717749思想: 插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直原创 2016-02-22 16:39:00 · 941 阅读 · 0 评论 -
打印九九乘法表算法-java
打印九九乘法表算法-java如果是不采用递归的话,大家很容易先到的方法应该就是循环9行,再把第n行循环n遍输出。 递归的话直接看代码:System.out.println("递归实现");multiTable(9);// 循环实现一System.out.println("循环实现一");for (int i = 1; i <= 9; i++) { for (int j = 1; j原创 2016-02-17 14:18:48 · 3257 阅读 · 0 评论 -
爬楼梯算法-java(递归与非递归)
递归爬楼梯非递归爬爬楼梯算法-java在网上看到一个爬楼梯的算法,这里记录一下:题目: 假设一个楼梯有 N 阶台阶,人每次最多可以跨 M 阶,求总共的爬楼梯方案数。 例如楼梯总共有3个台阶,人每次最多跨2个台阶,也就是说人每次可以走1个,也可以走2个,但最多不会超过2个,那么楼梯总共有这么几种走法:我们使用递归处理,在最后最多可跨越阶数大于剩余台阶的时候,需要做处理。 递归函数如下:private原创 2016-02-17 12:58:51 · 19973 阅读 · 0 评论