主页

在排序数组中查找元素的第一个和最后一个位置

题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。 进阶: 你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗? 示例 1: 输入:nums = [5,7,7,8,8,10], target = 8 输出:[3,4] 示例 2: 输入:nums = [5,7,7,8,8,10], target = 6 输出:[-1,-1] 示例 3: 输入:nums = [], target = 0 输出:[-1,-1] 提示: $0 <= nums.length <= 10^5$ $-10^9 <= nums...

阅读更多

x 的平方根

题目描述 给你一个非负整数x,计算并返回x的算术平方根 。由于返回类型是整数,结果只保留整数部分 ,小数部分将被舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 1: 输入:x = 4 输出:2 示例 2: 输入:x = 8 输出:2 解释:8 的算术平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。 提示: $0 <= x <= 2^{31} - 1$ 解题思路 二分搜索 由于x的平方根ans的整数部分满足$k^2<=x$的最大k值,因此我们可以对k进行二分查找,就能得到答案。 二分查找的下界为0,上界可以粗略弟设为x。在二分查找的每一步中,,我们只需要比较中间元素mid...

阅读更多

通过删除字母匹配到字典里最长单词

题目描述 给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字符串。 示例 1: 输入:s = “abpcplea”, dictionary = [“ale”,”apple”,”monkey”,”plea”] 输出:”apple” 示例 2: 输入:s = “abpcplea”, dictionary = [“a”,”b”,”c”] 输出:”a” 提示: 1 <= s.length <= 1000 1 <= dictionary.length <= 1000 1 <= ...

阅读更多

验证回文字符串 Ⅱ

题目描述 给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: s = “aba” 输出: true 示例 2: 输入: s = “abca” 输出: true 解释: 你可以删除c字符。 示例 3: 输入: s = “abc” 输出: false 提示: $1 <= s.length <= 10^5$ s 由小写英文字母组成 解题思路 双指针 首先思考如何判断一个字符串是回文串?我们可以使用双指针的方法,左右指针初始化为字符串的开头和结尾,通过不断移动这两个指针比较它们指向的字符是否相等,不相等就移动左右指针,进行下一轮的比较,直至左右指针相遇它们经过的字符都相等,那么这个字符串就是回文串。 题目中要求最多可以删除一个字...

阅读更多

平方数之和

题目描述 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 $a^2 + b^2 = c$ 。 示例 1: 输入:c = 5 输出:true 解释:1 * 1 + 2 * 2 = 5 示例 2: 输入:c = 3 输出:false 提示: $0 <= c <= 2^{31} - 1$ 解题思路 双指针 这是两数之和的题型的变形题,我们可以用双指针的方法解出来。 使用left,right两个指针初始化为0和$\sqrt c$,计算它们的平方和sum: 如果sum=c,说明存在两个数的平方和等于c,直接返回true; 如果sum>c,说明两个指针指向的数字偏大,缩小right指针,righr–; 如果sum<c,说明两个...

阅读更多

最小覆盖子串

题目描述 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如果 s 中存在这样的子串,我们保证它是唯一的答案。 示例 1: 输入:s = “ADOBECODEBANC”, t = “ABC” 输出:”BANC” 示例 2: 输入:s = “a”, t = “a” 输出:”a” 示例 3: 输入: s = “a”, t = “aa” 输出: “” 解释: t 中两个字符 ‘a’ 均应包含在 s 的子串中,因此没有符合条件的子字符串,返回空字符串。 提示: $1 <= s.leng...

阅读更多

环形链表 II

题目描述 给定一个链表的头节点head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 不允许修改链表。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:返回索引为 1 的链表节点 解释:链表中有一个环,其尾部连接到第二个节点。 示例 2: 输入:head = [1,2], pos = 0 输出:返回索引为 0 的链表节点 解...

阅读更多

合并两个有序数组

题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。 示例 1: 输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6] 解释:需要合并 [1,2,3] 和 [2,5,6] 。 合并...

阅读更多