
算法基础实现
文章平均质量分 57
&如歌的行板&
java实习生
展开
-
算法:使用双向链表实现LRU算法
LRU是最近最少使用的淘汰算法,当执行set(),get()方法的时候,把节点加到LRU链表的最前方。当超过容量的时候,淘汰最近最少使用的数据。原创 2024-07-27 14:30:10 · 399 阅读 · 0 评论 -
算法:二维数组打印问题
二维数组的遍历打印原创 2024-07-27 13:05:43 · 195 阅读 · 0 评论 -
java数组快速排序
高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放...原创 2022-11-03 10:39:24 · 1442 阅读 · 0 评论 -
盛最多水的容器算法
题目描述给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。题目分析:step 1原创 2022-04-18 16:10:50 · 364 阅读 · 0 评论 -
链表实现 Z 字形变换
题目:将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如给定字符串 PAYPALISHIRING 行数为4的时候排列图如下。然后再再逐行读取拼接成 PINALSIGYAHRPI题目分析:通过上面的excel我们可以看出和坐标轴很像,一个是X轴,一个是Y轴。step 1: 拆分多个单元。处理一个单元,剩余单元采用递归的形式处理。step 2 : 每个单元的元素个数是: int eachUnitElementCount = n原创 2022-04-15 13:50:05 · 338 阅读 · 0 评论 -
最长回文子串
什么是回文?回文就是顺序念和倒叙念都是一样的。比如 aba, abccba.实现理论分析step 1 :基准点往左走的值和往右走的值是一样的。如果不一样了,就不是回文了。角标2和角标4 都是c。角标1和角标5 都是b角标0和角标6 都是 a.这个回文是 abcccba.step 2 : 定位基准点。。如果基准点附近都是相同的元素,那么基准点就是这些相同的元素。如下图所示. 基准点角标是2的时候。----------》往左看角标1的值是b. 所以基准角标的left值 2.-----原创 2022-04-14 14:42:46 · 227 阅读 · 0 评论 -
无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。(比如 [sss ------> 1] [pdd------> 2] [abcabcbb ------> 3])主要思想是滑动窗口:实现代码1:(不借助map)public class Solution{ public int subStringLength(String s){ if(s == null || s.length == 0){ return 0; } char.原创 2022-04-12 22:01:57 · 193 阅读 · 0 评论 -
使用链表实现队列
链表一般场景下是无界链表,下面的算法也是无界链表。public class QueueNode{ /** 头节点 **/ private Node head; /** 未节点 **/ private Node tail; /** 临时节点,可不要。为了好理解 **/ private Node tempNode; public QueueNode(){ /** 增加哨兵节点,好处理 **/ head = new Node(); } /** 进入队列 **/ publi原创 2022-04-11 14:45:48 · 1404 阅读 · 0 评论 -
数组实现队列
public class QueueArray{ /** 数组 **/ private String[] arr; /** 数组容量,队列就是在该数据上实现的,这个n标识的就是数据的大小。 和要实现的队列关系不大 **/ private int n; /** 队列的开始角标 **/ private int head = 0; /** 队列的末尾角标 **/ private int tail = 0; /** 创建原始数据 **/ public QueueArray原创 2022-04-08 12:08:59 · 168 阅读 · 0 评论 -
有序数据的去重(返回去重后的长度)
要求:给出数据[1,1,1,2,2,3,4,5,5,6,7,8],更改为[1,2,3,4,5,6,7,8,x,x,x,x],并且得出长度8.在原数据上操作,只遍历一次,x是不需要关心的数据。直接上代码public int del(int[] arr) { if(arr == null || arr.length == 0){return 0;} //设置快慢指针的方法 int slow = 0, fast = 1; while(fast原创 2020-08-27 15:06:10 · 382 阅读 · 0 评论 -
数组转成链表(正序,逆序)
给定数组:[1,2,3,4,5,6,7,8].转成链表结构第一种方法,正序循环数组:1.设置哨兵节点2. 把哨兵节点sentineNode赋值给一个临时节点tempNode.循环数据1 进来的时候,建立一个新的节点newNode,赋值为1.3. 需要注意的是,哨兵节点sentineNode现在是整个链表的head节点.然后我们把临时节点指向newNode.我们遵循上面的步骤即可。代码如下: @Data public class Node { int val;原创 2020-05-28 14:46:11 · 3729 阅读 · 0 评论 -
链表中删除倒数第N个节点
链表删除倒数第N个节点:(需要理解指针的概念)/** * 删除倒数第N个节点 * @param head 源链表 * @param n 倒数第n个节点 * @return */public Node deleteNode(Node head, int n){ Node fast = head; Node slow = head; while (fast...原创 2019-04-25 11:22:02 · 162 阅读 · 0 评论 -
链表中的删除某个固定的值
1: 删除链表中的指定值: /** * 删除链表中指定值的节点 * @param head 原始链表, * @param value 指定的值 */public Node deleteSomeData(Node head, int value) { Node fast = head; while (head!= null && head.next !=...原创 2019-04-25 11:19:15 · 341 阅读 · 0 评论 -
判断数据中是否有重复数字
题目要求:在长度为 N 的数组中,存放的是0~N-1的数字,判断该数组中是否还有重复的数字。分析: 比如数组为[1,5,7,4,3,2,5,0]。判断下标值,与该位置的值是否相等,arr[i]是否等于 i遍历数组,第一位arr[0] = 1.则把arr[0] 的值与arr[1] 的值做调换。此时下标为1的位置对应的值是1. 继续判断arr[0]的值是否等于0,如果不等于,则继续调换,如果相...转载 2019-04-25 11:15:08 · 2308 阅读 · 0 评论 -
两个有序链表合并成一个有序链表
算法:两个有序链表合并成一个有序链表(Java实现)首先我们创建链表的结构类@Getter@Setterclass Node{ private Integer data; //存储数据 private Node next; //后继引用 public Node(Integer data) { this.data = data; }}...原创 2019-04-17 14:04:04 · 9444 阅读 · 0 评论 -
两个有序数组合并成一个有序数组
首先:定义好两个数据@Testpublic void run(){ int array1[] = {1,3,4,6,7,9,10}; int array2[] = {1,2,5,8}; System.out.println(Arrays.toString(hebing(array1, array2))); System.out.println(Arrays.t...原创 2019-03-30 13:23:29 · 2894 阅读 · 0 评论 -
单向链表的反转
链表是线性表结构,需要的内存可以是不连续的,通过指针将内存联系到一起,这些内存就成为链表的结点,每个结点不但要存储该结点的数据,还要存储下一个结点的地址,记录下个结点地址的指针我们称为后继指针,在java中称之为引用。‘比较常见的面试题是用java代码实现链表反转,实现反转的要领:比如现在有一个链表是4个结点组成。这个链表我们称之为A链表,反转后的链表我们称之为是B链表。我们要把第三个结点复...原创 2019-03-13 11:17:21 · 227 阅读 · 0 评论