
数据结构与算法
鹿谷門実
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode-560. 和为K的子数组——前缀和+哈希表
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。思路:前缀和通俗地来说就相当于数组的前 n 项和,题目中要求的是连续的子数组,并且还是连续和为k的。首先对于连续的子数组中的连续和,可以推出:su原创 2020-05-15 11:58:38 · 403 阅读 · 0 评论 -
历届试题 合根植物——并查集思想
问题描述 w星球的一个种植园,被分成 m * n 个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。 这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成为一体。如果我们告诉你哪些小格子间出现了连根现象,你能说出这个园中一共有多少株合根植物吗?输入格式 第一行,两个整数m,n,用空格分开,表示格子的行数、列数(1<m,n<1...原创 2020-03-25 21:53:21 · 218 阅读 · 0 评论 -
快速幂——原理及实现
大家首先要认识到这一点:任何一个整数N,都能用二进制来表示。。这点大家都应该知道,但其中的内涵真的很深很深(这点笔者感触很深,在文章的最后,我将谈谈我对的感想)!!计算机处理的是离散的信息,都是以0,1来作为信号的处理的。可想而知二进制在计算机上起着举足轻重的地位。它能将模拟信号转化成数字信号,将原来连续的实际模型,用一个离散的算法模型来解决。 好了,扯得有点多了,不过相信这写对下面的讲解还是有用的。原创 2020-03-10 16:56:11 · 642 阅读 · 0 评论 -
算法分析——时间复杂度
下面就举几个常见的时间复杂度常数阶O(1)通俗地来讲,就是没有循环等复杂结构 int i=0; int j=2; i++; j++; int m=i+j;对数阶O(log2n)在while循环里面,每次都将 i 乘以 2,乘完之后,i 距离 n 就越来越近了。假设循环x次之后,i 就大于 2 了,此时这个循环就...原创 2019-12-30 20:28:36 · 372 阅读 · 0 评论 -
堆排序(图解)
基本思路:1)将待排序序列构造成一个大顶堆2)此时,整个序列中的最大值就是顶堆的根节点3)将其与末尾元素进行交换,此时末尾就为最大值4)然后将剩余n-1个元素重新构造成一个堆,这样就会得到n个元素的次小值.如此反复执行,便能得到一个有序序列代码如下public class HeapSort { public static void main(String[]...原创 2019-11-30 14:01:42 · 217 阅读 · 0 评论 -
队列应用——素数环问题(通过回溯法解决)
1、问题描述将1~n的 n个自然数排列成环形,使得每相邻两数之和为素数,从而构成一个素数环。2、基本要求设计算法对任意输入的自然数n,求解素数环问题。如果无解,给出相应提示;否则,依次输出素数环中的数据。3、思路(1)先引入顺序表类Sqlist和链队列类LinkQueue,再创建Sqlist类的一个对象L作为顺序表,用于存放素数环的数据元素;创建LinkQueue类的一个对象Q,作为队列...原创 2019-10-25 20:11:35 · 3089 阅读 · 1 评论 -
约瑟夫(Josephus)问题——通过循环链表解决
1、问题描述**设编号为1,2,……,n(n>0)的n 个人按顺时针方向围坐一个圆圈,从第1 个人开始顺时针方向自1起顺序报数,报数到 m 为止,报数为 m 的人出列,然后从他的下一个人开始重新报数,报数为 m 的人又出列,……,直到所有的人全部出列为止。设计算法求n个人出圈的次序。2、基本要求(1)采用不带头结点的循环链表作为存储结构。(2)对任意n个人,密码m,实现约瑟夫问题。...原创 2019-09-28 00:31:20 · 645 阅读 · 0 评论