数据结构和算法
文章平均质量分 77
Lud_
积累点滴
展开
-
寻找两个正序数组的中位数
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5思路1:合并数组,利用两个数组是有序合并数组,然后获取中位数private原创 2020-10-15 20:30:41 · 136 阅读 · 0 评论 -
无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。解题思路:通过 set 判断重复通过滑动指针判断位置,每次增加从左向右指针的位置。 private fun getSubstring(s: String): Int { val occ: MutableSet<Char> = HashSet() val n = s.leng原创 2020-10-15 16:09:15 · 126 阅读 · 0 评论 -
两个链表数字相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并>且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:// 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)// 输出:7 -> 0 -> 8// 原因:342 + 465 = 807思路:从个位相加计算进位值和个位值拼接.原创 2020-10-15 00:32:30 · 760 阅读 · 0 评论 -
求:两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/two-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题思路1:直接循环法.原创 2020-10-14 19:11:43 · 213 阅读 · 1 评论 -
如何把一个有序的整数数组放到二叉树中+如何对二叉树镜像反转
把一个有序的整数数组放到二叉树中,所构造出来的二叉树也一定是有序二叉树。实现思路:\color{#A52A2A}{实现思路:}实现思路:以中间节点为根节点将数组分为左右两部分,对数组的两部分用递归的方式构建左右子树。代码如下:class ExampleUnitTest { /** 定义树节点 */ class BiTNode { var data: Int? = null var lChild: BiTNode? = null.原创 2020-05-28 16:54:04 · 429 阅读 · 0 评论 -
从数组中找到 a+b=c+d 的两个数对
给定一个数组,找出数组中是否有两个对数(a,b)和(c,d)使 a+b=c+d ,其中 a,b,c,d 是不同元素。比如: {1, 9, 23, 3, 33, 7}; 1+9 = 3+7分析:如果使用四重循环的话时间复杂度为O(N^4) ,时间复杂度太高。下面是使用 Hash 法,通过存数对的和在哈希表中,判断是否已经存储过相同的和。具体代码如下:public class Arr...原创 2020-05-02 15:59:09 · 2257 阅读 · 0 评论 -
Java实现LRU缓存方案
LRU 是 Least Recently Used 的缩写,意思是 最近最少使用 。LRU 缓存就是使用这种原理实现,就是缓存一定的数据,超过设定的最大值以后就移除过期的数据。解决方案:可以使用两个数据结构实现一个LRU缓存。1)使用双向链表实现的队列,队列的最大容量为缓存的大小。在使用的过程中把最近使用的页面移动到队列头,最近没有使用的放在后面。2)使用一个哈希表,把页号最为键,把...原创 2020-05-02 15:26:54 · 524 阅读 · 0 评论 -
java 如何实现队列
文章目录队列简介数组实现队列链表实现队列队列简介像栈一样,队列(queue)也是表。然而,使用队列时插入在一端进行而删除则在另一端进行。数组实现队列对于每一个队列数据结构,我们保留一个数组 Array 以及位置 front 和 rear,他们代表队列的两端。代码如下:/** * 数组实现队列 */public class MyQueue<T> { /...原创 2020-04-28 19:13:37 · 680 阅读 · 0 评论 -
java 如何实现栈
文章目录栈的定义数组实现栈链表实现栈栈的定义栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶(top),有的称为限定性的限制表结构。栈有时也叫做 LIFO (后进先出)表。数组实现栈使用数组实现栈优点:一个元素占用一个存储空间;缺点:如果初始化申请的存储空间太大,浪费存储空间。如果申请的存储空间太小,如果后期需要扩充空间,扩充是一个费时的...原创 2020-04-27 23:24:26 · 428 阅读 · 0 评论 -
如何查看单链表是否有环?
查看链表是否有环?两种方式思路:就是因为有环,所以是没有尾节点,也就是 node.next 永远都是有值的。可以通过两个前进速度不同的节点去循环,如果有相遇的时刻说明有环。首先创建Node节点private class Node { private Object data; Node next; public Node() { data = null; } publi...原创 2020-04-23 02:48:45 · 248 阅读 · 0 评论 -
两个升序数组合并成一个有序数组
题:两个升序数组合并成一个升序数组。利用题中数组是生序排列的。代码如下:代码中去除了相同元素@Test public void test() { // 定义两个数组 a ,b 生序排列 int[] a = {1, 3, 11, 34, 444, 555, 9999}; int[] b = {20, 22, 55, 800, 1000...原创 2020-04-23 01:30:35 · 5123 阅读 · 0 评论 -
实现链表的逆序的三种方式
文章目录问题分析方法一:就地逆序方法二:递归法方法三:插入法问题给定一个带头节点的单链表,将其逆序。head->1->2->3->4->5->6->7变为 head->7->6->5->4->3->2->1。分析单链表与数组不同,单链表中每个节点的地址都存储在其前驱节点的指针域中,因此对链表中任何一个节...原创 2019-09-24 17:38:26 · 18868 阅读 · 0 评论 -
单链表(java实现)
简单链表为了避免插入和删除的线性开销,我们需要保证表可以不连续存储,否则表的每个部分都可能需要整体移动,下面是链表的一般想法链表由一系列的节点组成,这些节点不必在内存中相连。每一个节点均含有表元素和包含该元素后节点的链。也就是大家说的next链,最后一个单元的next链引用为null。为了执行表的元素输出和find,只要从第一个节点开始然后通过next一直遍历该表即可。这种操作显示是线性时...原创 2019-07-06 16:47:40 · 296 阅读 · 0 评论