leetcode刷题笔记
遇见夏季的野兽
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【剑指Offer刷题笔记】表示数值的字符串
题目 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 数值(按顺序)可以分成以下几个部分: 若干空格 一个 小数 或者 整数 (可选) 一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数 若干空格 小数(按顺序)可以分成以下几个部分: (可选)一个符号字符(’+’ 或 ‘-’) 下述格式之一: 至少一位数字,后面跟着一个点 ‘.’ 至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字 一个点 ‘.’ ,后面跟着至少一位数字 整数(按顺序)可以分成以下几个部分: (可选)一个符号原创 2021-06-20 12:05:53 · 226 阅读 · 0 评论 -
【剑指 Offer】—— 31. 栈的压入、弹出序列
题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 题目来源:力扣(LeetCode) 思路 1.使用一个辅助栈stack模拟元素入栈出栈的过程 2.遍历pushed模拟入栈过程,如果在push过程中如果发现stack.peek()==popped[i]说明此时po原创 2021-06-13 20:03:50 · 219 阅读 · 0 评论 -
【双指针】——LeetCode26. 删除有序数组中的重复项
题目 给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例 1: 输入:nums = [1,1,2] 输出:2, nums = [1,2] 解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。 示例 2: 输入:nums = [0,0,1,1,1,2,2,3,3,4] 输出:5,原创 2021-04-17 11:43:26 · 137 阅读 · 0 评论 -
【位运算】——LeetCode318. 最大单词长度乘积
题目 难度:中等 给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。 示例 1: 输入: ["abcw","baz","foo","bar","xtfn","abcdef"] 输出: 16 解释: 这两个单词为 "abcw", "xtfn"。 示例 2: 输入: ["a","ab","abc","d","cd","bcd","abcd"]原创 2021-04-04 14:16:43 · 256 阅读 · 0 评论 -
【位运算】——342. 4的幂
题目 难度:简单 给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。 整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x 示例 1: 输入:n = 16 输出:true 示例 2: 输入:n = 5 输出:false 示例 3: 输入:n = 1 输出:true 题目来源:力扣(LeetCode) 思路 1.先判断是不是2的幂次方 2.二进制形式有且只有一个位为1并且在奇数位上 利用 n & 0b010101010101原创 2021-04-03 10:38:02 · 163 阅读 · 0 评论 -
【位运算】——LeetCode231. 2的幂
【题目】 难度简单298 给定一个整数,编写一个函数来判断它是否是 2 的幂次方。 示例 1: 输入: 1 输出: true 解释: 20 = 1 示例 2: 输入: 16 输出: true 解释: 24 = 16 示例 3: 输入: 218 输出: false 题目来源:力扣(LeetCode) 思路 如果这个数是 2 的幂次方,那么它的二进制形式有且只有一个位为1 方法1: 使用Integer.bitCount方法会统计这个数二进制形式下1的个数 方法2: 利用(n-1)&n==0 比如8原创 2021-04-03 10:19:16 · 154 阅读 · 0 评论 -
【位运算】——不使用额外变量交换两个整数
思路 使用异或运算^ 代码 public static void main(String[] args) { int a = 100; int b = 200; a = a ^ b; b = a ^ b; a = a ^ b; System.out.println("a=" + a); System.out.println("b=" + b); }原创 2021-04-03 09:46:09 · 164 阅读 · 0 评论 -
【数组与矩阵】——LeetCode769. 最多能完成排序的块
题目 难度:中等 数组arr是[0, 1, ..., arr.length - 1]的一种排列,我们将这个数组分割成几个“块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。 我们最多能将数组分成多少块? 示例 1: 输入: arr = [4,3,2,1,0] 输出: 1 解释: 将数组分成2块或者更多块,都无法得到所需的结果。 例如,分成 [4, 3], [2, 1, 0] 的结果是 [3, 4, 0, 1, 2],这不是有序的数组。 示例 2: 输入: arr =原创 2021-04-02 16:56:26 · 226 阅读 · 0 评论 -
【数组与矩阵】——leetcode667.优美的排列 II
leetcode667. 优美的排列 II 难度:中等 给定两个整数 n 和 k,你需要实现一个数组,这个数组包含从 1 到 n 的 n 个不同整数,同时满足以下条件: ① 如果这个数组是 [a1, a2, a3, … , an] ,那么数组 [|a1 - a2|, |a2 - a3|, |a3 - a4|, … , |an-1 - an|] 中应该有且仅有 k 个不同整数;. ② 如果存在多种答案,你只需实现并返回其中任意一种. 示例 1: 输入: n = 3, k = 1 输出: [1, 2, 3] 解原创 2021-04-01 16:59:17 · 159 阅读 · 0 评论
分享