初级算法
OK_boom
大龄搬砖工,酷爱计算机技术,java/C#/android/free pascal/C++。
展开
-
备忘一个分词工具
http://www.hankcs.com/program/algorithm/aho-corasick-double-array-trie.html转载 2022-03-21 09:25:45 · 68 阅读 · 0 评论 -
java版走迷宫算法
思路1、用栈保存路径:保存每一步数据(row/col位置,来时方向)2、为什么要保存方向,因为每一步要尝试右下左上4个方向是否走得通,方向保存了才不会重复尝试3、当尝试某个方向的位置能通,则保存当前位置并向这个方向位置走一步,并且将方向重新设为向右(最新尝试的方向); 并将新位置标识为“已走过”以免重复判断4、4个方向都试过失败后,回退(从路径中获得后退位置)再尝试下一个方向下载链接:添加链接描述...原创 2021-09-09 17:28:28 · 183 阅读 · 0 评论 -
栈的实现原理
栈有实现有两种,一种是顺序栈,一种是链栈顺序栈顺序栈需要预定义连续存储单元(数组),压栈、出栈时控制好当前指针和size计数器就好链栈链栈更简单,类似单链表那样定义存储单元,压栈时替换掉start,并将新start的后续指向旧start; 出栈时反操作,将start退出,并将start的后续作为新的start...原创 2021-09-08 15:39:17 · 158 阅读 · 0 评论 -
JAVA手写双向链表
双向链表类双向链表其实和单链表类似的,只是在定义存储结构时多了一个指向前驱结点,删除时只要更新当前的结点指向的前驱结点的下一个结点为当前结点的下一个结点即可,当然增加时也要做一些操作,代码如下:package com.freestyle;/** * 双向链表 * Created by rocklee on 2021/9/7 11:37 */public class DLinkedList<E> implements List<E> { private stati.原创 2021-09-07 15:27:22 · 296 阅读 · 0 评论 -
JAVA手写单链表
单链表类主要实现原理就是定义一个Node,除了内容外还有一个属性指向下一个Node,单链表类里面只需要存储开头的Node和size,并在增删的时候更新它即可。手写也非常简单,125行代码:package com.freestyle;/**单链表类 * Created by rocklee on 2021/9/6 17:19 */public class SingleLinkedList<E> implements List<E>{ private stati..原创 2021-09-07 11:03:58 · 282 阅读 · 0 评论 -
求一个数组里有多少种不同的连续子数组
/** * 求一个数组里有多少种不同的连续子数组 * @param nums * @param min * @param max * @param output */ private static void combination(int[] nums, int min, int max, Consumer<int[]> output){ for (int i=max;i>=min;i--){ for (int j=0;j&...原创 2021-05-07 11:54:56 · 1266 阅读 · 0 评论 -
数组中的0全部后移
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。解法如下,第一种是不为0的前移,后面全部填0,第二种是双指针交换方法public void moveZeroes(int[] nums) { int index=0; for (int i=0;i<nums.length;i++){原创 2021-04-08 15:56:53 · 345 阅读 · 0 评论