
数据结构与算法
文章平均质量分 57
通过java语言对算法进行记录和总结
星星泡个饭
是喜欢那!
展开
-
Java实现--冒泡排序
算法描述:比较相邻的两个元素,如果第一个比第二个大,就交换他们的位置对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个,即需要进行length-1次。第一次是对n个数进行n-1次比较,进行到最后第n个的一个是最大的;第二次是对n-1个数进行n-2次比较,进行到最后第n-1个的一个是最大的动画演示:代码实现:import java.util.Arrays;/** * 比较相邻的两个元素,如果第一个比原创 2022-02-18 21:16:47 · 155 阅读 · 0 评论 -
滑动窗口算法(Sliding Window Algorithm)
一、写在前面:说起滑动窗口这个算法思路,很多人会感到头秃,这个算法技巧的思路非常简单,就是维护一个窗口,不断滑动,然后更新答案,那么如何向窗口中添加新元素,如何缩小窗口,在窗口滑动的哪个阶段更新结果这些都是要考虑的问题点。二、基本示例力扣的第三题,难度中等题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。思路分析这道题目我们需要找到字符串中的最长的子串,普通的暴力解法是通过for循环遍历给定字符串的所有子串,判断子串中有没有重复的字符,如果没有则找出最长的。但是上面的算法原创 2021-12-12 19:30:12 · 10343 阅读 · 2 评论 -
Java实现常见的判断单双链表是否有环和是否相交的问题
1.判断两个链表是否有环基本思路:如果链表有环,那么在遍历链表时则会陷入死循环,利用这个特征,我们可以设计这样的算法。使用一个slow指针,一个fast指针slow指针一次往后遍历以1个节点,fast指针一次往后遍历2个节点,一直做这样的操作如果fast指针在遍历过程中,遍历到了NULL节点说明链表没有环否则当slow指针和falst指针相同,则说明环有节点public boolean hasCycle(ListNode head) { ListNode slow = he原创 2021-10-03 18:56:27 · 323 阅读 · 1 评论 -
Java实现表达式计算(中缀表达式向逆波兰式的转换)
定义:中缀表达式:我们平时写的数学表达式一般为中缀表达式,如“5+2*(3*(3-1*2+1))”,直接拿中缀表达式直接让计算机计算表达式的结果并不能做到。后缀表达式:把中缀表达表达式“5+2*(3*(3-12+1))”转化“523312-1+**+”这样的形式,就是后缀表达式。这种记法叫做后缀(postfix)或逆波兰(reverse Polish)记法。计算这个问题最容易的方法就是使用一个栈。具体实现:(1)方法概述:1.从左到右进行遍历。2.运算数,直接输出。3.左括号,直接压入堆栈原创 2021-09-25 21:58:57 · 923 阅读 · 3 评论 -
Java实现数组动态扩容与缩容
首先直接上代码private void reSize(int size) { if(size+1 > data.length){ E[] temp = (E[])new Object[size*2]; for (int i = size - 1; i >= index; i--) { temp[i] = data[i]; } data = temp; } if(size == da原创 2021-09-19 16:22:48 · 437 阅读 · 0 评论 -
Java算法实现(二分查找+字符串)
二分查找二分查找基本介绍二分查找是一种非常非常高效的查询算法,针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将带查找的区间缩小为之前的一半,知道找到要查找的元素,或者区间被缩小为0。代码实现:循环实现 public int binary_search(int[] nums, int target) { int left = 0, right = nums.length - 1;//注意 while(left <= right) {原创 2021-05-09 10:41:10 · 1328 阅读 · 0 评论