给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 提示: 解题: 数字大一点就会出问题,最后超时了 官方解答: 1.哈希表 2.置换
算法
LeetCode 40 组合总和 II
给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 示例 1: 示例 2: 提示: 代码: 根据上一篇代码写出了有重复的,没想好怎么去重 官方解答: 回溯
LeetCode 39 组合总和
题目:给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。 对于给定的输入,保证和为 target 的不同组合数少于 150 个。 示例 1: 示例 2: 示例 3: 提示: 想了半天没解出来,直接看答案了 官方解答: 搜索回溯
LeetCode 38 外观数列
题目: 给定一个正整数 n ,输出外观数列的第 n 项。 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列: 前五项如下: 要 描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。 示例 1: 示例 2: 提示: 代码: 官方解答 1.遍历生成 2.枚举查表
LeetCode 37 解数独
题目: 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3×3 宫内只能出现一次。(请参考示例图) 数独部分空格内已填入了数字,空白格用 ‘.’ 表示。 示例 1: 输入: 输出: 解释:输入的数独如上图所示,唯一有效的解决方案如下所示: 提示: board.length == 9 board[i].length == 9 board[i][j] 是一位数字或者 ‘.’ 题目数据 保证 输入数独仅有一个解 解题: 每个行,列,宫里面1-9只出现一次 代码: 吭哧吭哧写了两天,结果还超时了。。 官方解答: 1.回溯 2.位运算 3.枚举优化 学习了
LeetCode 36 有效的数独
题目: 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3×3 宫内只能出现一次。(请参考示例图) 注意: 一个有效的数独(部分已被填充)不一定是可解的。 只需要根据以上规则,验证已经填入的数字是否有效即可。 空白格用 ‘.’ 表示。 解题: 按给出来的方式验证就可以 代码: 官方解答: 自己写的效率有点低,数学是真的重要
LeetCode 35 搜索插入位置
题目: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 解题: 二分查找 代码: 官方解答: 终于没使用暴力循环了
LeetCode 34 在排序数组中查找元素的第一个和最后一个位置
题目: 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 解题: 挨着比较相等就返回第一个和最后一个下标 代码: 官方解答: 自己的解法时间复杂度只有 O(n)
LeetCode 33 搜索旋转排序数组
题目: 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。 给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。 你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。 解题: 挨着比较相等就返回下标 代码: 官方解答: 总感觉我哪里没理解对,中等难度的就这么解出来了
LeetCode 32 最长有效括号
题目: 给你一个只包含 ‘(‘ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 解题: 左括号数量和右括号数量相等的时候,就是一对括号,先有左括号,左边不大于右边的时候,重新计数,取最大值 代码: 官方解答: