摘要:
给定一单链表的头指针head 1、判断链表是否又环。 2、如果有环,求环长以及环的起始节点。 阅读全文
摘要:
一、k-选取问题:给定任意一个可比较的序列,从中找出第k个元素(k从0开始,默认是从小到大的次序)的问题称为k-选取(k-selection)。k-选取问题有两种退化的情况:1、0-选取问题即是找出序列的最小值问题。2、(length-1)-选取问题即是找出序列的最大值问题。以上两中问题都有最优解, 阅读全文
摘要:
package com.demo; import java.util.*; import java.io.*; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class ImageTra { /* * 有给定base64编码的字符串,抓化为图片 * 先经过解码生成... 阅读全文
摘要:
一、二叉堆 堆有序:一颗二叉树中每个节点都大于或者等于其两个孩子时,就称为堆有序。根节点是堆有序的二叉树的最大节点。 堆有序的二叉树可以用指针来表示,堆有序的完全二叉树除了可以用指针表示外,还可以用数组表示。 二叉堆:二叉堆是一组堆有序的完全二叉树,并且在数组中按层级存储(不使用数组中0号位置的元素 阅读全文
摘要:
java实现: 细节和注解都在注释在代码中了。 一些值得注意的细节问题: 1、i从low开始,j从high+1开始;i和j指针移动过程中采用++i和--j的形式。 2、if (i == high) {break;}需要检查,否则在某些情况下会出错。 阅读全文
摘要:
一、merge算法 合并算法merge()总是基于这样一个事实:单个元素总是有序的。 对于原待排序列,因为单元素是最小的有序单元,因此合并算法总是从两个单元素作为待合并的子序列开始,逐步向上合并。 例如:int[] ary = {9,12,78,10,30,8,20,15,50,60};其合并轨迹为 阅读全文
摘要:
一、冒泡排序 1、算法思想: 1)、两层循环,外层循环i从0开始,内层循环从j=i+1开始2)、如果ary[i] < ary[j],则交换其值3)、直到外层循环到length-1 2、主算法实现 3、稳定性: 二、选择排序 1、算法思想 1)、两层循环,外层循环i从0开始,内层循环j从i+1开始。2 阅读全文
摘要:
一、算法思路:1、两个集合:openList和closeListopenList:存放每走一步后可能的搜索节点集合。closeList:存放已经走过的节点的集合。 2、估值函数:F = G + HF:起始节点startNode到终止节点endNode的距离G:起始节点startNode到当前节点的距 阅读全文
摘要:
一、预处理 给定任意四则运算的字符串表达式(中缀表达式),preDeal预先转化为对应的字符串数组,其目的在于将操作数和运算符分离。 例如给定四则运算内的中缀表达式: 字符串数组化后得: 二、中缀表达式转后缀表达式 规则: 遍历中缀表达式, A、如果遇到操作数直接输出 B、如果遇到运算符,分情况: 阅读全文
摘要:
一、理解next数组 1、约定next[0]=-1,同时可以假想在sub串的最前面有一个通配符“*”,能够任意匹配。对应实际的代码t<0时的处理情况。 2、next[j]可以有如下的几种理解思路:1)next[j]为sub[j]前面的字符串的前后缀字符串匹配的最大匹配长度例如sub=“ababap” 阅读全文