![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 62
柒安9527
这个作者很懒,什么都没留下…
展开
-
哈希表优化求解两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。暴力穷举的时间复杂度为O(N^2),利用哈希表可以将时间复杂度降到O(N)。上述代码过于冗余,不够简洁。原创 2022-12-02 14:21:35 · 186 阅读 · 1 评论 -
回文对称数的判断
回文的判断原创 2022-08-08 19:00:28 · 215 阅读 · 0 评论 -
用一个栈实现另一个栈的排序
题目一个栈中元素的类型为整型,现在想将该站从栈顶到底从大到小的顺序排序,只允许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?分析原本有一个栈(stack),里面存有无序的整型数据,现在只允许申请一个一个栈(help),实现将 stack 栈中的数据排序方法stack 栈弹出栈顶元素,记做 cur想要将 stack 中的元素按照从大到小排列,则将辅助栈(help)中元素按照从小到大排序,然后将 help 中元素依次压入 stack 栈中如果 cur 小于或原创 2020-09-17 21:01:21 · 132 阅读 · 0 评论 -
编写一个类,用两个栈实现队列,支持队列的基本操作(add、poll、peek)
题目:编写一个类,用两个栈实现队列,支持队列的基本操作(add、poll、peek);需要满足的条件:如果 stackPush 要往 stackPop 中压入数据,那么必须一次性把 stackPush 中的数据全部压入如果 stackPop 不为空,stackPush 绝对不能向 stackPop 中压入数据Queue方法:boolean add(E e):添加一个元素到队尾boolean offer():添加一个元素到队尾E remove():获取对手的元素,并从队原创 2020-09-11 23:13:27 · 358 阅读 · 0 评论 -
八皇后问题(Queen8)思路分析+源码
问题描述在8*8的国际象棋上摆放八个皇后,使其不能相互攻击,即:任意两个皇后都不能处于同一行、同一列或者同一斜线上,问有多少种摆法?(92种)思路分析第一个皇后先放在第一行的第一列第二个皇后放在第二行的第一列,判断是否合适,若不合适放在第二列、第三列···直到找到一个合适位置继续放置第三个皇后,和步骤2相同。直到第八个皇后放置在一个不冲突的位置。此时找到了一个正解当得到一个正解时,在栈回退到上一个栈时,就开始回溯,即将第一个皇后放置在第一列的所有正解全部得到然后回头,继续将第一个皇后放在原创 2020-09-07 21:51:07 · 1481 阅读 · 0 评论 -
完全二叉树的详解、判断方法
完全二叉树定义:对于一棵具有 n 个结点二叉树按层序编号,如果编号为 i (1≤i≤n)的结点与同样深度的满二叉树中编号为 i 的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。判断完全二叉树的方法:看树的结构示意图,按照满二叉树的结构逐层顺序编号,如果出现了空挡,就说明不是完全二叉树,否则就是。下面这些都不是完全二叉树:这些二叉树,按层序编号中间出现了空挡,所以不是完全二叉树这个是完全二叉树:二叉树的特点:叶子结点只能出现在最下两层最下层的叶子一定集中在左部连续位原创 2020-09-06 23:22:42 · 2447 阅读 · 0 评论 -
简单选择排序( Simple Select Sort )图解、思路、源码
简单选择排序( Simple Select Sort )排序的分类基本思想:每一趟在 n-i+1( i=1,2,···,n-1 )个记录总选择关键字最小的记录作为有序序列的第 i 个记录图解思路:两个 for 循环嵌套,2. 外循环从头到尾递加,i 就是剩下记录中最小记录的位置3. 内循环从 i+1 到尾递加,与 i 进行比较,选出最小的记录4. 选择出最小的记录赋值给 arr[ i ]优点:先比较,后交换,减少交换次数时间复杂度:O(n^2)代码pub原创 2020-09-06 16:28:40 · 447 阅读 · 0 评论 -
快速排序( Quick Sort )图解、思路、源码
快速排序( Quick Sort )交换类排序,是对冒泡排序的升级基本思想:通过一趟排序将待排记录分割正独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。图解思路1.定义四个方法主方法递归方法排序方法交换方法2.递归排序低子表和高子表3.枢轴 pivot 的选择代码import java.util.Arrays;public class Quick_Sort { public s原创 2020-09-06 16:20:17 · 333 阅读 · 0 评论 -
冒泡排序(bubble sort)图解、思路、源码
冒泡排序( bubble sort )基本思想:两两比较相邻记录的关键字,如果逆序则交换,直到没有逆序记录为止图解核心代码:(交换位置)temp = arr[ j-1 ];arr[ j-1 ] = arr[ j ];arr[ j ] = temp;思路:两个 for 循环嵌套,2. 外循环从头循环,递加到尾,进行比较3. 内循环从尾循环,递减到 i ,进行交换位置代码优化:外循环执行一次,若没有发生交换,则说明已有序,在内循环立一个 flag ,如果内循环的 i原创 2020-09-06 12:27:39 · 295 阅读 · 0 评论 -
哈希表(散列表)
概念散列技术是在记录的存储位置和它的关键字之间建立的一个确定的对应关系 f ,使得每一个关键字 key 对应一个存储位置 f( key ).对应关系 f 称为散列函数,又称哈希(Hash)函数。采用散列技术将记录存储在一块连续的存储空间中,这块连续的存储空间中,这块连续存储空间称为散列表或哈希表(HashTable)。关键字对应的记录存储位置我们称为散列地址。冲突两个关键字 key1 ≠ key2,但是 f(key1) = f(key2),这种现象称为冲突,并把key1 和 key2 称为这个散原创 2020-08-09 23:26:46 · 106 阅读 · 0 评论 -
有一个公司,当有新的员工来报道时,要求将该员工的信息加入( id,姓名),当输入该员工的 id 时,要求查找到该员工的所有信息 要求:不使用数据库,尽量节省内存,速度越快越好哈希表(散列)
题目看一个实际需求,google公司的一个上机题:有一个公司,当有新的员工来报道时,要求将该员工的信息加入( id,姓名…),当输入该员工的 id 时,要求查找到该员工的所有信息要求:不使用数据库,尽量节省内存,速度越快越好哈希表(散列)图解分析思路分析:需要定义四个类1、测试类2、链表类3、雇员类4、哈希表类测试类1、调用哈希表类(HashTable)创建一个对象,并初始化 HashTable 的长度2、写一个简单的菜单3、添加雇员时,因为重写了构造器所以要传入 id 和原创 2020-08-09 21:27:09 · 656 阅读 · 0 评论