![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法和数据结构
forwardMyLife
只争朝夕
展开
-
寻找最长回文串算法题解(力扣第5题)
创建一个boolean类型的二维数组record,record[i][j]表示,从第i个字符到第j个字符是否是回文串,record[i+1][j-1]如果是回文串那必然第s[i+1] == s[j-1] && record[i][j] == true。此解法时间复杂度为o(n2),时间复杂度过高,且没有利用内层回文串去判断外层是否是回文串,效率较低。如果j-i...原创 2022-08-27 13:39:03 · 370 阅读 · 0 评论 -
寻找2个有序数组中的中位数算法题(力扣第4题)
【代码】寻找2个有序数组中的中位数算法题(力扣第4题)原创 2022-08-21 16:37:49 · 148 阅读 · 0 评论 -
java使用二分法将正整数开方,并保留多少位小数
二分法在算法中很常用的算法,基础的二分比较容易理解,还有些变形的二分解决起来会相对棘手些。题目使用二分法将一个正整数进行开方,并保留若干位小数。二分法在某些数据结构和特定的场景下很适合用去查找某个符合特定要求的结果。时间复杂度会比较低。我们直接用二分去逼近目标值即可。/** * 用二分法将正整数n开方 * @param n * @param precision 保留的小数精度...原创 2019-12-19 21:48:21 · 1719 阅读 · 0 评论 -
二分搜索从左到右搜索第一个大于等于目标数的数字
1.题目描述在一个有序数组中搜索从左到右搜索第一个大于等于目标数的数字, 如果目标数大于数组的全部数字则返回数组长度。2.题目分析有序数组搜索第一个考虑二分搜索,找寻第一个大于等于目标数的数字,通过二分搜索收缩左右边间即可,while条件中,相等时退出边界,随意返回low或high都是成立的。/** * 在一个顺序数组中搜索从左到右搜索第一个大于等于目标数的数字, * 如果目标数大...原创 2019-11-23 14:19:19 · 1747 阅读 · 0 评论 -
深入理解希尔排序
希尔排序希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的改进版本。希尔排序是非稳定排序算法。 希尔排序是把记录按下标的一定增量进行分组,增量的长度初始化为待排序数组的长度,然后每次折半,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,便是直接插入排序。时间复杂度希尔排序是按照不同步长对元素进行原创 2017-11-19 11:30:16 · 386 阅读 · 0 评论 -
堆排序详解
堆排序堆排序利用堆积树所设计的排序算法,本质上是利用完全二叉树中双亲结点和孩子结点之间的内在关系做选择排序。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是一颗完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,在数组的非降序排序中,需要使用的就是大根堆,降序用小根堆。基本思想引自百度百科–堆排序 堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大原创 2018-01-30 21:05:09 · 498 阅读 · 0 评论 -
基于TreeMap源码深入理解红黑树
红黑树简介在介绍红黑树之前,首先我们要知道什么叫二叉搜索树。 二叉搜索树的性质: 首先是一个二叉树,其次其左子树的值小于其父结点的值,右子树的值大于父节点的值。我们知道树这种数据结构非常适合做搜索,例如数据库的索引也是基于B+树实现的,二叉搜索树的插入,删除,搜索,一般的时间复杂度是O(log(n)).,如下图是一个标准的二叉搜索树, 但是极端情况下有可能退化成链表。时间复杂度变为O...原创 2018-02-14 23:12:08 · 1398 阅读 · 0 评论 -
求一个整数数组的最大子数组之和
题目求一个整形数组里面有正有负,求最大连续子数组之和思路:其实挺明确的,就是保存一个最大值max,在用一个变量current,在for循环中叠加数组元素,如果current大于max就赋值给max,如果current<0就将current置为0,代码主要参考网上的,但是要考虑a[0]为负数,a[1]为正数的时候。 开始想的有点复杂,想到动态规划和贪心去了,但是发现在写代码的时候,写半天...原创 2018-03-24 19:07:10 · 456 阅读 · 0 评论