
算法
jsyuger
这个作者很懒,什么都没留下…
展开
-
【力扣笔记】单词距离解析
题目:有个内含单词的超大文本文件,给定任意两个不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?输入:words = ["I","am","a","student","from","a","university","in","a","city"],word1 = "a", word2 = "student"输出:1直接上代码:class Solution { public int find原创 2022-05-27 20:32:59 · 201 阅读 · 0 评论 -
算法训练——查找字符串数组中的最长公共前缀
练手好题。原创 2022-01-05 00:47:29 · 764 阅读 · 0 评论 -
算法训练——动态规划之爬楼梯问题
运筹学上有一章节专门讲动态规划的,印象比较深刻的有一道爬楼梯问题,用dp思想来解决。【题目】大概是这样:有n级楼梯,每次只能爬1级或2级楼梯,问爬完总共有多少种方法?转化为程序描述如下:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。输入: 3输出: 3解释: 有三种方法可以爬到楼顶。【解析】根据题目意思,我们采用逆推的形式进行推理: 我们用f(n)表示爬完第n格楼梯的方法总数。第n格楼梯可以直接由第n-1格、第n-2格楼梯直接到达,即原题目可...原创 2021-11-03 00:48:31 · 370 阅读 · 0 评论 -
算法训练——寻找两个正序数组的中位数
分享一道力扣题目:寻找两个正序数组的中位数给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5示...原创 2021-10-28 00:02:38 · 184 阅读 · 0 评论 -
算法训练——求最长不重复的子串
输入一串字符串,输出最长的不重复子串题目描述给定一个字符串,返回最长无重复子串(无重复指的是所有字符都不相同)。示例输入 qqwerayy,返回 qweray输入 qwerqwet,返回 rqwet输入 qwqwqwqw,返回 qwshow the code as follow:package math;import org.junit.Test;/** * 输入一个字符串,返回最长的不重复的子串 * @author jsyuger * eg:输入qqwera原创 2021-02-27 16:08:33 · 284 阅读 · 0 评论 -
算法训练——N皇后问题
今天看了一道国际象棋的布局问题,码界称之为“N皇后”问题,十分有趣。采用递归思想,不断探索和回溯,解法暴力之极。这里分享当棋盘不大的时候,基础的N皇后问题实现代码。思路藏在注释里面啦~主要是校验的时候有两点比较重要:不同行和不同列就是说,arr[i]不能等于arr[a],因为一行只能放一个,一列只能放一个。 不在同一条斜线上就是说,|i-a|不能等于|arr[i]-arr[a]|题目描述N皇后问题是指在N∗N的棋盘上要摆N个皇后(1<=n<=14)要求:任何两个皇后不同行,不同原创 2021-02-24 00:24:17 · 614 阅读 · 0 评论 -
算法训练——输入n个整数找出其中最小的K个数
最近刷上了oj的算法,会陆续分享我的解题思路和方法,有更好更优思路解法欢迎交流~题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。输入[4,5,1,6,2,7,3,8],4返回值[1,2,3,4]show the code as follow:import java.util.ArrayList;import java.util.List;public class Solut原创 2021-02-22 13:33:41 · 1083 阅读 · 1 评论 -
一题多解——求数组中每个元素出现的次数
好久没更新博客了,写博客分享是个好习惯,发现坚持是比较难得的一件事情。2021年第一更,就写一篇比较简单常用的算法入门题吧,主要是利用程序算法思想,求数组中每个元素出现的次数。先看一下需求描述:现在有一列数组: a[0] , a[1] , a[2] , ...... a[n-1]求这列数组中每个元素出现的次数打印格式:{a[0]=次数,a[1]=次数,......a[m]=次数}打印说明:打印结果中,a[m]不重复打印,a[m]可以不按照数组顺序拿到这样一道题,我们脑海中...原创 2021-02-22 02:39:44 · 4477 阅读 · 0 评论 -
打印菱形
打印菱形(Java版本)打印菱形应该是我们刚刚开始学算法的经常遇到的题目了,今天又重新手写了一遍,这里采用分段式打印法,将打印菱形的算法重新实现了一下。其实打印菱形很大程度上可以归结为临界值问题,即什么时候开始打印空格,什么时候开始打印图标,什么时候打印换行符,理清了思路实现起来就比较容易了。以下是分段式打印法的具体实现:package math;import org.junit.Test;/** * 打印菱形 * @author jsyuger * 输入n,打印出2n-1行的菱形原创 2020-10-10 00:01:14 · 567 阅读 · 0 评论 -
有趣的路灯问题——按规律打印图形
路灯问题人的天职在勇于探索真理。 ——哥白尼(波兰)国庆长假期间,看到一条路上的路灯非常有趣,有红黄蓝三种颜色,依次排成一条线状。不禁联想到有个厂子的笔试题里面也有类似的场景,描述是这样子的,一条长长的公路上,分别挂有红黄蓝三种颜色的装饰灯,排列规则如图所示:(这里用三角形代表红灯,用正方形代表黄灯,用圆形代表蓝灯)假设公路无限长,灯按照以上这种规律排列下去,要求程序计算每输入一个整数n,就能输出第n个位置的路灯颜色(图案)。这样的场景下,如果用数学的方法来解决,肯定要涉及到数列的求和.原创 2020-10-09 15:18:32 · 663 阅读 · 0 评论 -
用Java实现斐波那契数列
斐波那契数列如下数列:0、1、1、2、3、5、8、13、21、34......从第三个数开始,每个数都等于前两个数字的和。今天又看到了斐波那契数列,心想实现这个数列的算法应该是十分简单的,于是随手写了个程序,跑了一下,boom~出现了意想不到的情况,主要是打印前100个斐波那契数的时候,出现负数,而且计算时间过长。先贴个控制台:分析:斐波那契数超过了数据类型的阈值,算法性能不好。改进:切换成精度更高的数据类型,并限制打印的数字的范围大小,改进算法。贴个满足需求的源码:packa原创 2020-10-03 16:52:58 · 3225 阅读 · 0 评论 -
堆排序的使用场景——从10万个数里面选出最小的10个
【学习笔记】前几天手撕了堆排序的基本算法,堆是一种重要的数据结构,不但排序效率相对较快,而且排序时间复杂度也比较稳定。今天就来简单谈谈堆排序其中一种使用场景,还是以“从10万个数里面选出最小的10个”为例,利用堆排序从无序数组里面选择最大(小)的部分元素。实现原理:用个无序数组模拟10万个数,取无序数组里面前面的10个数字构建一个大顶堆,从第11个数开始逐个与堆顶元素进行比较,小于堆顶元素则入堆,并重新构建大顶堆,这样能保证堆顶元素始终是最大的。循环完毕之后,堆里面的10个元素就是最小的了。Ta原创 2020-09-27 17:55:26 · 3633 阅读 · 1 评论 -
Java基础算法之堆排序
【学习笔记】基础算法三:堆排序该算法是堆排序的具体实现,将一个无序的数组构建成一个堆,通过不断构建大顶堆的方法,每次都筛选出最大值放到堆的末尾。具体实现:从第一个非叶子节点开始,与其两个孩子节点进行比较,孩子节点大于父节点就交换其位置,最后将根结点(也就是最大值)和最后一个节点交换位置,这样每一趟都能筛选出最大值。以下是快速排序的具体实现:package sort;import org.junit.Test;/** * 该算法是堆排序的具体实现 * @author jsyuger原创 2020-09-21 18:04:01 · 116 阅读 · 0 评论 -
改进版快速排序——从10万个数里面选出最小的10个
【学习笔记】改进版快速排序昨天手撕了原始快速排序的基本算法,一直在思考这些基础算法的使用场景,今天分享一个改进版的快速排序算法,用于对数字进行快速部分排序,举个例子:从10万个无序的数里面选出最小的10个并有序输出。适合用到以下改进版快速排序的思想:Talk is cheap,show the code~package sort;import org.junit.Test;/** * 改进版快速排序 * @author jsyuger * 该类为原始快速排序算法的改进版实现,原创 2020-09-18 12:23:55 · 1360 阅读 · 0 评论 -
Java基础算法之快速排序
【学习笔记】基础算法二:快速排序该算法是原始的快速排序思想,采用递归思想,通过 i , j 两个指针来动态循环比较和用key来标注基准数,实现了快速排序的基本算法。以下是快速排序的具体实现:package sort;import org.junit.Test;/** * 基础算法之快速排序 * @author jsyuger * 该类为原始快速排序算法的具体实现 */public class QuickSort { //快速排序的入口 public void quickS原创 2020-09-17 16:23:44 · 167 阅读 · 0 评论 -
Java基础算法之冒泡排序
【学习笔记】基础算法一:冒泡排序冒泡排序实现类:package sort;/** * * @author jsyuger * 该类为冒泡排序算法 * */public class BubbleSort { //该方法为冒泡排序的 public void bubble(int []arr) { int length = arr.length ; for(int i = 0 ; i < length - 1 ; i++) { for(int j =原创 2020-09-17 11:45:29 · 146 阅读 · 0 评论