
数据结构与算法
风一般的程序媛
这个作者很懒,什么都没留下…
展开
-
三树之和 排序➕双指针
题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。思路:注意:答案中不可以包含重复的三元组这个方法就是我们常说的「双指针」,当我们需要枚举数组中的两个元素时,如果我们发现随着第一个元素的递增,第二个元素是递减的,那么就可以使用双指针的方法代码class Solution { public List<List<Integer>> threeSu原创 2021-03-25 11:26:56 · 149 阅读 · 0 评论 -
动态规划-移动智能机器人
题目:菜鸟网络仓库有一排小货架,共有N个,货架的底部是空的,现在智能机器人在某个货架下,小明写了一个非常简单的智能机器人移动程序,逻辑如下:每过1分钟,智能机器人必须随机的从一个货架下移动到相邻的一个货架下。比如刚开始智能机器人在第4个货架下,过1分钟后,智能机器人可能会在第3个货架下或者在第5个货架下。如果刚开始时智能机器人在第1个货架下,过1分钟以后,智能机器人一定会在第2个货架下。原创 2017-08-18 09:22:44 · 898 阅读 · 0 评论 -
动态规划-打靶子/戳气球
题目描述:在某射击场有N个靶,每个靶上都有一个分数,存在score数组中。击中第i个靶的得分为score[left] * score[i] * score[right],同时原left和right两个靶变为相邻的靶。其中得分为0的靶是不能射击的,当left不存在或者不能射击时,得分为 score[i] * score[right],同理right也遵循此规则; 当left和right都不存原创 2017-08-18 09:39:34 · 1324 阅读 · 0 评论 -
回文串题目总结
回文串“回文串”是一个从左读和从右读都一样的字符串,比如“level”或者“noon”等等就是回文串。 常见的回文串有:dad,123454321,123456654321….题目1:判断一个字符串是否为回文串(递归法)可参考博客:http://blog.youkuaiyun.com/nthack5730/article/details/68068524题目2:给定一个字符串s,你原创 2017-07-14 16:58:27 · 625 阅读 · 0 评论 -
反转链表-递归及遍历
两种方法:递归法思路:在反转当前节点之前先反转后续节点。这样从头结点开始,层层深入直到尾结点才开始反转指针域的指向。简 单的说就是从尾结点开始,逆向反转各个结点的指针域指向。head:是前一结点的指针域(PS:前一结点的指针域指向当前结点)head.getNext():是当前结点的指针域(PS:当前结点的指针域指向下一结点)reHead:是反转后新链表的原创 2017-07-14 18:56:28 · 280 阅读 · 0 评论 -
堆排序
什么是堆:堆(二叉堆)可以视为一棵完全的二叉树,完全二叉树的一个“优秀”的性质是,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示(普通的一般的二叉树通常用链表作为基本容器表示),每一个结点对应数组中的一个元素。 分类:大顶堆、小顶堆思想与步骤:将序列构建成大顶堆。将根节点与最后一个节点交换,然后断开最后一个节点。重复第一、二步,直到所有节点断开。原创 2017-06-17 10:46:26 · 246 阅读 · 0 评论 -
简单选择排序
简单选择排序适用情况:常用于取序列中最大最小的几个数时。(如果每次比较都交换,那么就是交换排序;如果每次比较完一个循环再交换,就是简单选择排序。)步骤:遍历整个序列,将最小的数放在最前面。遍历剩下的序列,将最小的数放在最前面。重复第二步,直到只剩下一个数。如何写成代码:首先确定循环次数,并且记住当前数字和当前位置。将当前位置后面所原创 2017-06-17 11:40:43 · 419 阅读 · 0 评论 -
快速排序算法及优化
基本思想:1)选择一个基准元素,通常选择第一个元素或者最后一个元素,2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。3)此时基准元素在其排好序后的正确位置4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。快速排序的示例:(a)一趟排序的过程:原创 2017-06-19 15:18:27 · 582 阅读 · 0 评论 -
归并排序
归并排序适用情况:速度仅次于快排,内存少的时候使用,可以进行并行计算的时候使用。算法思想:将要排序的序列分成两个长度相等的子序列,然后对每一个子序列进行拆分,一直到只有两个元素的两个子序列,对这两个子序列进行归并,将它们合并成一个序列,这种方法就是所说的二路归并的方法。算法步骤:选择相邻两个数组成一个有序序列。选择相邻的两个有序序列组成一个有序序原创 2017-06-17 16:19:40 · 227 阅读 · 0 评论 -
直接插入排序与希尔排序
1.直接插入排序首先我们来看直接插入排序: 直接插入排序就是一个将无序区的内容向有序区放的一个过程,有序区不断地变大,无序区不断的变小,这样最后全部变为有序,就完成了直接插入排序的过程了。 算法步骤:1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序转载 2017-06-15 15:58:29 · 421 阅读 · 0 评论