
算法与数据结构
算法与数据结构,作为编程的基础,不过什么时候,我们都应该试着去了解其思想,再转化为实际应用。
maslii
独立之精神,自由之思想
展开
-
□□□+□□□=□□□的个数
采用暴力和DFS的差距是:5836ms和55ms,所以可以看出算法的重要性 package cn.stu.test; public class TestNineNumberAdd { /** * 求□□□+□□□=□□□的个数。 * * @param args */ public static void main(String...原创 2018-02-24 07:28:45 · 325 阅读 · 0 评论 -
链表常见的面试题
class Node { Node next; int data; public Node(int data) { this.data = data; } public Node(){} public Node(Node next, int data) { super(); this.next ...原创 2018-02-25 11:03:51 · 224 阅读 · 0 评论 -
判断两个字符串里面的最大子字符串
问题描述: 最大公共子串长度问题就是: 求两个串的所有子串中能够匹配上的最大长度是多少。 比如:”abcdkkk” 和 “baabcdadabc”, 可以找到的最长的公共子串是”abcd”,所以最大公共子串长度为4。 下面的程序是采用矩阵法进行求解的,这对串的规模不大的情况还是比较有效的解法。 public class Test06 { static int f(Str...原创 2018-03-22 09:50:15 · 472 阅读 · 0 评论 -
选择排序
选择排序原创 2018-01-19 20:28:33 · 234 阅读 · 0 评论 -
插入排序
插入排序原创 2018-01-19 21:44:21 · 278 阅读 · 0 评论 -
冒泡排序
冒泡排序 O(n²) 冒泡排序的思路是:外循环从左往右遍历,内循环在外循环的基础上,通过循环判断,挑选出需要的元素放到外循环此时的位置 package cn.stu.test; public class Test{ public static int[] sort_bubbln (int[] arr){ for(int i=0;i1;i++){原创 2018-01-19 23:31:42 · 241 阅读 · 0 评论 -
归并排序
归并排序 O(Nlogn) 归并排序的思路是:将要排序的数组先递归分为一个一个的,长度为1的小数组,再通过递归合并起来,在合并的过程中,先开辟一个新的数组空间,通过同时遍历两个老数组的每个元素(此时两个数组已经是有序的了),不断地给新空间赋值来达到重新排序的效果。可以理解为变交换元素为赋值,再加上递归来实现。 package cn.stu.test; import java.u原创 2018-01-20 21:19:04 · 193 阅读 · 0 评论 -
基于归并排序的链表排序
基于归并排序的链表排序 O(Nlogn) 要点: 如何找到链表中的中心点——快慢“指针” 归并排序的实现——采用递归的思维 LinkNode.java package cn.stu.test; public class LinkNode { int num; LinkNode next; public LinkNode(int原创 2018-01-20 23:20:49 · 431 阅读 · 0 评论 -
基于冒泡排序的链表排序
基于冒泡排序的链表排序 O(n²) 比较: 基于冒泡排序的链表排序,易懂,运行效率不高 基于归并排序的链表排序,效率高 LinkNode.java LinkedListBobbleSort.java package cn.stu.test; public class LinkedListBobbleSort { public static void ma原创 2018-01-20 23:33:50 · 936 阅读 · 0 评论 -
希尔排序
希尔排序 希尔排序的思路是:在插入排序的基础上优化升级,从插入排序一步一步移动的基础上,改进为一次移动比较大篇幅,从而提升排序的效率。 package cn.stu.test; import java.util.Arrays; public class Test{ public static int[] sortShell (int[] arr){ /*原创 2018-01-21 00:59:24 · 205 阅读 · 0 评论 -
快速排序
快速排序 快排的思路是:选定最左边的数为参考值,从第二个数开始与参考值进行比较,小的集中在参考值的左边,大的不用管 package cn.stu.test; import java.util.Arrays; public class SortQuick { public static void main(String[] args) { int[] a原创 2018-01-22 02:14:06 · 233 阅读 · 0 评论 -
堆排序 O(nlogn)
堆排序的思路:将要排序的数组先构成一个大顶堆(此时除了顶点,其他还是乱序的),将第一个元素与最后一个元素交换,再对n-1个元素堆排序,依次类推就能构成一个从小到大的数组 package cn.stu.test; import java.util.Arrays; public class HeadSort { public static void swap(int[] a...原创 2018-01-28 20:04:05 · 818 阅读 · 0 评论 -
几种排序算法的比较
几种排序算法的比较 稳定的排序:插入排序,归并排序(其实与程序的实现有关) 不稳定的:快排和堆排序原创 2018-01-28 20:07:32 · 444 阅读 · 0 评论 -
二分查找
二分查找的思路就是:首先传入的数组要有序,然后每次都与中间的数据做比较,再判断是找到了要找的数据,还是找得大了还是找得小了,然后再决定接下去比较的范围 /** * * @param arr从小到大的有序的数组 * @param target目标数字 * @return目标数字所在的下标 */ public static in...原创 2018-02-08 21:07:11 · 183 阅读 · 0 评论 -
二分搜索树(BST)
BST主要是用来实现查找表的功能,通过Key来找到相应的Value,类似于日常使用的字典。不仅可以高效CRUD,数据维护,还可以用来找min,max,floor,ceil,rank,select等等 ^v^作者此处就不去做Key-Value的演示了,仅仅用Value来替代…… 首先,需要定义一个class作为实体 public class BSTNode { ...原创 2018-02-13 04:52:35 · 277 阅读 · 0 评论 -
并查集
并查集的思路:通过一个数组加上两个操作(Find和Union)来维护一棵树,它是图的基础,用来处理连接的问题或者是判断网络中节点是否是连接的状态 import java.util.Scanner; public class UnionFind { /** * num是代表有多少个点 * group是代表有多少组关系式 * boss存放代表点之间关系...原创 2018-02-13 19:12:48 · 151 阅读 · 0 评论 -
迷宫寻宝类——基于DFS
DFS算法需要处理的问题是:当前的情况怎么处理,完了再去处理下一步怎么处理。否则,乱成一锅粥! package cn.stu.aha; import java.util.Scanner; public class TestMiGong { // 用于存放迷宫,0表示可以走的地方 static int[][] num = new int[25][25]; //...原创 2018-03-10 11:51:01 · 1035 阅读 · 0 评论