
Java 数据结构与算法介绍及面试题
文章平均质量分 92
Java 数据结构与算法介绍及面试题
覚えていない903
这个作者很懒,什么都没留下…
展开
-
Java 数据结构与算法-堆
在上述代码中,minHeap 是一个最小堆,它的每个元素都是一个长度为 2 的数组,数组的第 1 个数字表示数对的第 1 个数字在数组 nums1 中的下标,第 2 个数字表示数对的第 2 个数字在数组 nums2 中的下标。通常只删除位于堆顶部的元素。如果从第 1 个数组中选出第 k+1 个数字和第 2 个数组中的某个数字组成数对 p,那么该数对之和一定不是和最小的 k 个数对中的一个,这是因为第 1 个数组的前 k 个数字和第 2 个数组中的同一个数字组成的 k 个数对之和都要小于数对 p 之和。原创 2023-11-06 11:49:27 · 752 阅读 · 0 评论 -
Java 数据结构与算法-整数
例如,输入的字符串数组 words 为 [”abcw”, “foo”, “bar”, “fxyz”, “abcdef”],数组中的字符串 “bar” 与 “foo” 没有相同的字符,它们长度的乘积为 9。Java 中的整数类型都是有符号整数,即如果整数的二进制表示的最高位为 0 则表示其为正数,如果整数的二进制表示的最高位 1 则表示其为负数。例如,输入的 n 为 4,由于 0、1、2、3、4 的二进制形式中 1 的个数分别为 0、1、1、2、1,因此输出数组 [0, 1, 1, 2, 1]原创 2023-10-17 21:06:32 · 173 阅读 · 0 评论 -
Java 数据结构与算法-数组
题目:输入一个整数数组,如果一个数字左边的子数组的数字之和等于右边的子数组的数字之和,那么返回该数字的下标。例如,在数组 [1, 7, 3, 6, 2, 9] 中,下标为 3 的数字(值为 6)的左边 3 个数字 1、7、3 的和与右边两个数字 2 和 9 的和相等,都是 11,因此正确的输出值是 3。此时两个指针的移动方向是相同的。如果关于子数组的数字之和的面试题并没有限定数组中的所有数字都是正数,那么可以尝试从第 1 个数字开始累加数组中前面若干数字之和,两个累加的和的差值对应一个子数组的数字之和。原创 2023-10-18 09:37:08 · 564 阅读 · 0 评论 -
Java 数据结构与算法-字符串
如果字符串 s2 中包含字符串 s1 的某个变位词,则字符串 s1 至少有一个变位词是字符串 s2 的子字符串。例如,字符串 s1 为 “cbadabacg”,字符串 s2 的两个变位词 “cba” 和 “bac” 是字符串 s1 中的子字符串,输出它们在字符串 s1 中的起始下标 0 和 5。如果将字符串看成一个由字符组成的数组,那么也可以用两个指针来定位一个子字符串,其中一个指针指向字符串的第 1 个字符,另一个指针指向字符串的最后一个字符,两个指针之间所包含的就是一个子字符串。原创 2023-10-18 09:38:56 · 133 阅读 · 0 评论 -
Java 数据结构与算法-链表
先让第 1 个指针从链表的头节点开始朝着指向下一个节点的指针先移动 k-1 步,然后让第 2 个指针指向链表的头节点,再让两个指针以相同的速度一起移动,当第 1 个指针到达链表的尾节点时第 2 个指针正好指向倒数第 k 个节点。采用这种方法,在一个没有环的链表中,当快的指针到达链表尾节点的适合慢的指针正好指向链表的中间节点。题目:在一个多级双向链表中,节点除了有两个指针分别指向前后两个节点,还有一个指针指向它的子链表,并且子链表也是一个双向链表,它的节点也有指向子链表的指针。原创 2023-10-19 14:18:50 · 84 阅读 · 0 评论 -
Java 数据结构与算法-哈希表
由于被删除的数字已经位于数组的尾部,此时删除就不会引起数据移动,因此时间复杂度仍然是 O(1)原创 2023-10-19 14:21:23 · 114 阅读 · 0 评论 -
Java 数据结构与算法-栈
题目:输入一个表示小行星的数组,数组中每个数字的绝对值表示小行星的大小,数字的正负号表示小行星运动的方向,正号表示向右飞行,负号表示向左飞行。假设输入数组的长度为 n。但如果直方图中柱子的高度是排序的(递增排序或递减排序),那么每次最矮的柱子都位于直方图的一侧,递归调用的深度就是 O(n),此时分治法的时间复杂度也变成 O(n^2)用单调栈法计算直方图中最大矩阵的面积需要 O(n) 的空间,同时还需要一个长度为 n 的数组 heights,用于记录直方图中柱子的高度,因此这种解法的空间复杂度是 O(n)原创 2023-10-20 10:31:04 · 203 阅读 · 1 评论 -
Java 数据结构与算法-队列
假设计数器时间窗口的大小是 w 毫秒,其中记录的时间是递增的,那么时间窗口中记录的时间的数目是 O(w),因此空间复杂度是 O(w)。如果当前遍历的节点的数目变成 0,那么这一层所有的节点都已经遍历完,可以开始遍历下一层的节点。类型 CBTInserter 的构造函数按照广度优先搜索的顺序从根节点开始遍历输入的完全二叉树,如果一个节点的左右子节点都已经存在,就不可能再在这个节点添加新的子节点,因此可以从队列中删除这个节点,并将它的左右子节点都添加到队列之中……如果该节点有子节点,则将该子节点插入队列。原创 2023-10-20 10:36:58 · 133 阅读 · 1 评论 -
Java 数据结构与算法-树
逐一扫描数组中的每个数字。对于每个数字 nums[i],应该先从它前面的 k 个数字中找出小于或等于 nums[i] 的最大的数字,如果这个数字与 nums[i] 的差的绝对值不大于 t,那么就找到了一组符合条件的两个数字。否则,再从它前面的 k 个数字中找出大于或等于 nums[i] 的最小的数字,如果这个数字与 nums[i] 的差的绝对值不大于 t,就找到了一组符合条件的两个数字。例如,将从 0 到 t 的数字放入编号为 0 的桶中,从 t+1 到 2t+1 的数字放入编号为 1 的桶中。原创 2023-10-23 14:19:34 · 1456 阅读 · 0 评论