![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java数据结构与算法
王胖子总叫我减肥
学习使我进步
展开
-
Java数据结构与算法----如何从数组中找出满足a+b=c+d的两个数对
1.问题 给定一个数组,找出数组中是否有两个数对(a,b)和(c,d),使得a+b=c+d,其中a,b,c,d是不同的元素,如果有多个答案,打印任意一个即可。例如,给定数组:{3,4,7,10,20,9,8},可以找到两个数对(3,8)和(4,7),使得3+8=4+7。2 思路分析: 以数对为单位进行遍历,在遍历过程中,把数对和数对的值存放在Hash中,(键为数对的和,值为数对)。当遍历一个键值对,如果他的和在哈希表中已经存在,那么就找到了满足条件的键值对。3代码实现p...原创 2020-07-30 18:07:35 · 1063 阅读 · 0 评论 -
数据结构与算法Python语言实现第一章课后习题(完整篇)
数据结构与算法Python语言实现第一章课后习题R-1.1 编写一个Python函数is_multiple(m,n),用来接收两个整数值n和m,如果n是m的倍数,即存在整数i使得n=mi,那么函数返回True,否则返回false。def is_multiple(n,m): return(n%m==0)>is_multiple(16,4)>True>is_mul...原创 2019-09-11 10:50:48 · 4202 阅读 · 1 评论 -
Java数据结构与算法之KMP算法
1 字符串匹配问题、 1)有一个字符串str1=“你好你好 你好你好 你你好你好好 ”,和一个子字符串str2="你好好",现在判断str1是否包含str2,如果存在就返回第一次出现的位置,如果没有,就返回-1.2. 暴力匹配算法 如果用到暴力匹配的思路,,并假设现在str1匹配到 i 位置,子串str2 匹配到j...原创 2020-07-14 11:12:41 · 169 阅读 · 0 评论 -
java数据结构与算法之动态规划问题
1 动态规划算法介绍(1)动态规划算法的核心思想是:将大问题划分成小问题进行解决,从而一步步获取最优解的处理算法。 (2)动态规划算法与分治算法类似,其基本思想也是将待求问题分解成若干子问题,先求解子问题,然后从这些子问题的解的得到原问题的解。 (3)与分治算法不同的是,适合于动态规划求解的问题,经过分解得到的子问题往往不是相互独立的。(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步求解的)(4)动态规划可以通过填表的方式来逐步推进,得到最优解。2 动态规划算...原创 2020-07-11 23:01:05 · 113 阅读 · 0 评论 -
java数据结构与算法之分治算法
1 分治算法简介 分治算法是一种很重要的算法。字面上的解释就是“分而治之”,就是把一个复杂的问题分成两个或者更多的相同的或者相似的问题,再把问题分成更小的子问题,直到最后的子问题可以简单的直接求解。原问题的解即子问题解的合并。2 分值算法的基本步骤分治算法在每一层递归上都有三个步骤:(1)分解:将原问题分解成若干个规模较小,相互独立,与原问题形式形同的子问题。(2)解决:若干子问题规模较小而容易被解决则至二级解,否则递归解各个子问题。(3)合并:将各个子问题的解合并成原问题...原创 2020-07-11 21:09:03 · 154 阅读 · 0 评论 -
java数据结构与算法之二分查找(非递归)
1.二分查找(非递归) (1)二分查找只适用于从有序的数列进行查找(比如查找数字和字母等),将数列排序后在进行查找。 (2)二分查找法的运行时间为对数时O(log2 n),即查找到需要的目标位置最多只需要log2 n步,假设从[0-99]队列(100个数,n=100)中寻找目标数30,即最多需要查找7次。2.二分查找算法(非递归)代码实现 数组{1,3,8,10,11,67,100},编程实现二分查找,使用非递归的方式完成。public class BinarySearchN...原创 2020-07-11 13:35:14 · 112 阅读 · 0 评论 -
java 数据结构与算法之哈希表
1 哈希表的基本介绍 哈希表也叫散列表,是根据关键码值(key vaule)而直接进行访问的数据结构。它通过关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数据叫做散列表。2 应用场景 有一个公司,当有新员工来报道的时候,要求员工的信息加入,当输入员工的id时,要求查找到该员工的所有信息。 要求:不要使用功能数据库,速度越快,越好===>哈希表(散列表)。 添加数据时,保证按照id从低到高插...原创 2020-06-22 15:18:03 · 127 阅读 · 0 评论 -
java数据结构与算法之差值查找算法
1.插值算法的介绍 1)插值算法类似于二分算法,不同的是插值查找每次从自适应mid处开始查找。 2)将二分查找的求mid索引的公式,low表示左边的索引left,hight表示右边的索引right,科研就是二分查找中的findval 3) int mid=low +(hight-low)*(key-arr[low])/(arr[hight]-arr[low]) 对应前面的公式为: int mi...原创 2020-06-21 19:04:53 · 385 阅读 · 0 评论 -
java数据结构与算法之二分查找
1.二分查找 对一个有序的数列进行二分查找{1,8,10,89,10000,1234},输入一个数看看该数组是否存在此数,并且要求返回下标,如果没有下标就提示没有此数。2.二分查找算法的思路 1、首先取得该数组的中间的下标:mid=(left+right)/2 2、然后将要查找的数findval和arr[mid] 进行比较 2.1 如果findval>arr[mid],说明要查找的数在mid的右边,因此需要递归的向右进行查找。 ...原创 2020-06-20 10:09:51 · 156 阅读 · 0 评论 -
java数据结构与算法之线性查找算法
线性查找算法 有一个数列:{1,8,10,89,1000,1234}, 判断数列中是否包含此名称【顺序查找】 。 要是找到了,就提示找到,并给出下表值。package Search;public class seqSearch { public static void main(String[] args) { int arr[]={1,8,10,89,1000,1234}; int index = seqSearch(arr, 1000); ...原创 2020-06-20 09:15:04 · 99 阅读 · 0 评论 -
java数据结构与算法------时间复杂度与空间复杂度
1. 算法的时间复杂度度量一个程序的(算法)执行时间的两种方法 1. 事后统计的方法:实际跑程序,看用了多长时间。 2. 事前估算的方法:通过分析某种算法的时间复杂度来判断。2. 时间频度 时间频度:一个算法花费的时间与算法中语句执行的次数成正比。一个算法中语句执行的次数称为语句频度或者时间频度。 记为: T(n)。 例如: 计算1--100所有的数字之和,一下有两种算法:int total =0;int e...原创 2020-06-11 20:57:22 · 252 阅读 · 0 评论 -
java 数据结构与算法之递归 ----(八皇后问题)
1. 八皇后问题的介绍 在8乘以8的国际象棋上,摆放八个皇后,使其不能相互攻击,即:任两个皇后都不能处于同一行、同一列、统一斜线上,问有多少种摆法。2. 八皇后问题思路分析: 1. 第一个皇后放在第一行第一列。 2. 第二个皇后放在第二行第一列,然后判断是否OK,如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个 合适。 3. 继续第三个皇后,还是第一列、第二列。。直到第8个皇后也能放在一个不冲突的位置,就是找到了一个正确的解...原创 2020-06-11 19:20:17 · 137 阅读 · 0 评论 -
java数据结构与算法之递归问题 -----迷宫问题
1. 递归的概念 简单的说:递归就是自己调用自己,每次调用时传入不同的变量。2. 简单的递归代码实现; 打印问题:递归的调用package recursion;public class RecursionTest { public static void main(String[] args) { //打印问题 test(4); } private static void test(int i) { ...原创 2020-06-10 14:50:54 · 178 阅读 · 0 评论 -
用数组和链表来模拟队列结构
1.队列 1.队列是一个有序的列表,可以用数组或者链表来实现。 2. 队列存储数据的原则是:先进先出。 2. 数组模拟队列的思路 1. 队列本身就是一个有序的列表,如果要使用数组的结构来储存队列的数据。就要有以下声明: maxSize 表示队列的最大容量。 2. 队列的输出输入分别从队列的前后端处理,定义队列的前端下标为front ,队列的下标为rear。 front会...原创 2020-05-30 19:27:10 · 140 阅读 · 0 评论 -
二维数组转换为稀疏数组的算法实现
1. 首先看一个需求 编写五子棋棋盘 因为该二维数组有很多的0,记录了很多没有意义的值,因此需要将二维数组转换为稀疏数组。2稀疏数组的处理方式: 1. 记录数据数组中一种有几行几列,有多少不同的值。 2. 把具有不同值的元素的行列与值记录在一个小规模的数组中,进而减少数组的规模。 稀疏数组的介绍: 3.案例分析: 1. 二维数组转换成...原创 2020-05-30 17:14:03 · 204 阅读 · 0 评论