随笔分类 -  剑指Offer

摘要:一个长度为 n−1 的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围 0 到 n−1 之内。 在范围 0 到 n−1 的 n 个数字中有且只有一个数字不在该数组中,请找出这个数字。 数据范围: 1≤n≤1000 样例: 输入:[0,1,2,4] 输出:3 代码: class Solutio 阅读全文
posted @ 2025-05-30 12:47 回忆、少年 阅读(27) 评论(0) 推荐(0)
摘要:统计一个数字在排序数组中出现的次数。 例如输入排序数组 [1,2,3,3,3,3,4,5] 和数字 3,由于 3 在这个数组中出现了 4 次,因此输出 4。 数据范围: 数组长度 [0,1000]。 样例: 输入:[1, 2, 3, 3, 3, 3, 4, 5], 3 输出:4 代码: class 阅读全文
posted @ 2025-05-30 10:47 回忆、少年 阅读(18) 评论(0) 推荐(0)
摘要:输入两个链表,找出它们的第一个公共结点。 当不存在公共节点时,返回空节点。 数据范围: 链表长度 [1,30000]。 保证两个链表不完全相同,即两链表的头结点不相同。 样例: 给出两个链表如下所示: 输出第一个公共节点c1 代码: /** * Definition for singly-linke 阅读全文
posted @ 2025-05-30 09:15 回忆、少年 阅读(17) 评论(0) 推荐(0)
摘要:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。 输入一个数组,求出这个数组中的逆序对的总数。 数据范围: 给定数组的长度 [0,100]。 样例: 输入:[1,2,3,4,5,6,0] 输出:6 代码: class Solution { //记录逆序对数量 int r 阅读全文
posted @ 2025-05-30 09:01 回忆、少年 阅读(12) 评论(0) 推荐(0)
摘要:请实现一个函数用来找出字符流中第一个只出现一次的字符。 例如,当从字符流中只读出前两个字符 go 时,第一个只出现一次的字符是 g。 当从该字符流中读出前六个字符 google 时,第一个只出现一次的字符是 l。 如果当前字符流没有存在出现一次的字符,返回 # 字符。 数据范围: 字符流读入字符数量 阅读全文
posted @ 2025-05-30 08:44 回忆、少年 阅读(21) 评论(0) 推荐(0)
摘要:在字符串中找出第一个只出现一次的字符。 如输入"abaccdeff",则输出b。 如果字符串中不存在只出现一次的字符,返回 # 字符。 数据范围: 输入字符串长度 [0,1000]。 样例: 输入:"abaccdeff" 输出:'b' 代码: class Solution { public char 阅读全文
posted @ 2025-05-29 10:42 回忆、少年 阅读(45) 评论(0) 推荐(0)
摘要:我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。 例如 6、8 都是丑数,但 14 不是,因为它包含质因子 7。 求第 n 个丑数的值。 数据范围: 1≤n≤1000 样例: 输入:5 输出:5 注意: 习惯上我们把 1 当做第一个丑数。 代码: class Soluti 阅读全文
posted @ 2025-05-29 10:29 回忆、少年 阅读(29) 评论(0) 推荐(0)
摘要:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 假设字符串中只包含从 a 到 z 的字符。 数据范围: 输入字符串长度 [0,1000]。 样例: 输入:"abcabc" 输出:3 代码: class Solution { public int longestSubs 阅读全文
posted @ 2025-05-29 10:15 回忆、少年 阅读(24) 评论(0) 推荐(0)
摘要:在一个 m×n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。 你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。 给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物? 注意: m,n>0 m×n≤1350 样例: 输入: [ 阅读全文
posted @ 2025-05-29 10:02 回忆、少年 阅读(17) 评论(0) 推荐(0)
摘要:给定一个数字,我们按照如下规则把它翻译为字符串: 0 翻译成 a,1 翻译成 b,……,11 翻译成 l,……,25 翻译成 z。 一个数字可能有多个翻译。 例如 12258 有 5 种不同的翻译,它们分别是 bccfi、bwfi、bczi、mcfi 和 mzi。 请编程实现一个函数用来计算一个数字 阅读全文
posted @ 2025-05-29 09:48 回忆、少年 阅读(26) 评论(0) 推荐(0)
摘要:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 例如输入数组 [3,32,321],则打印出这 3 个数字能排成的最小数字 321323。 数据范围: 数组长度 [0,500]。 样例: 输入:[3, 32, 321] 输出:321323 注意: 输出数 阅读全文
posted @ 2025-05-29 09:24 回忆、少年 阅读(11) 评论(0) 推荐(0)
摘要:数字以 0123456789101112131415… 的格式序列化到一个字符序列中。 在这个序列中,第 5 位(从 0 开始计数)是 5,第 13 位是 1,第 19 位是 4,等等。 请写一个函数求任意位对应的数字。 数据范围: 0≤ 输入数字 ≤2147483647 样例: 输入:13 输出: 阅读全文
posted @ 2025-05-29 08:45 回忆、少年 阅读(50) 评论(0) 推荐(0)
摘要:输入一个整数 n,求从 1 到 n 这 n 个整数的十进制表示中 1 出现的次数。 例如输入 12,从 1 到 12 这些整数中包含 “1” 的数字有 1,10,11 和 12,其中 “1” 一共出现了 5 次。 数据范围: 1≤n≤109 样例: 输入: 12 输出: 5 代码: 详细题解地址:h 阅读全文
posted @ 2025-05-28 11:00 回忆、少年 阅读(18) 评论(0) 推荐(0)
摘要:输入一个 非空 整型数组,数组里的数可能为正,也可能为负。 数组中一个或连续的多个整数组成一个子数组。 求所有子数组的和的最大值。 要求时间复杂度为 O(n)。 数据范围: 数组长度 [1,1000]。 数组内元素取值范围 [−200,200]。 样例: 输入:[1, -2, 3, 10, -4, 阅读全文
posted @ 2025-05-28 10:21 回忆、少年 阅读(19) 评论(0) 推荐(0)
摘要:如何得到一个数据流中的中位数? 如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。 如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 数据范围: 数据流中读入的数据总数 [1,1000]。 样例: 输入:1, 2, 3, 4 输出:1,1.5 阅读全文
posted @ 2025-05-28 10:08 回忆、少年 阅读(23) 评论(0) 推荐(0)
摘要:输入 n 个整数,找出其中最小的 k 个数。 注意: 输出数组内元素请按从小到大顺序排序; 数据范围: 1≤k≤n≤1000 样例: 输入:[1,2,3,4,5,6,7,8] , k=4 输出:[1,2,3,4] 代码: class Solution { public List<Integer> g 阅读全文
posted @ 2025-05-28 09:43 回忆、少年 阅读(14) 评论(0) 推荐(0)
摘要:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 假设数组非空,并且一定存在满足条件的数字。 思考题: 假设要求只能使用 O(n) 的时间和额外 O(1) 的空间,该怎么做呢? 数据范围: 数组长度 [1,1000]。 样例: 输入:[1,2,1,1,3] 输出:1 代码: class 阅读全文
posted @ 2025-05-28 09:22 回忆、少年 阅读(15) 评论(0) 推荐(0)
摘要:输入一组数字(可能包含重复数字),输出其所有的排列方式。 数据范围: 输入数组长度 [0,6]。 数组元素取值范围 [1,10]。 样例: 输入:[1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 代码: clas 阅读全文
posted @ 2025-05-28 09:09 回忆、少年 阅读(28) 评论(0) 推荐(0)
摘要:请实现两个函数,分别用来序列化和反序列化二叉树。 您需要确保二叉树可以序列化为字符串,并且可以将此字符串反序列化为原始树结构。 数据范围: 树中节点数量 [0,1000]。 样例: 你可以序列化如下的二叉树 为:"[8, 12, 2, null, null, 6, 4, null, null, nu 阅读全文
posted @ 2025-05-27 11:16 回忆、少年 阅读(18) 评论(0) 推荐(0)
摘要:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。 要求不能创建任何新的结点,只能调整树中结点指针的指向。 注意: 需要返回双向链表最左侧的节点。 例如,输入下图中左边的二叉搜索树,则输出右边的排序双向链表。 数据范围: 树中节点数量 [0,500]。 代码: //4 6 8 10 12 阅读全文
posted @ 2025-05-27 10:29 回忆、少年 阅读(18) 评论(0) 推荐(0)