leetcode刷题笔记
遇见夏季的野兽
这个作者很懒,什么都没留下…
展开
-
【剑指Offer刷题笔记】表示数值的字符串
题目请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。数值(按顺序)可以分成以下几个部分:若干空格一个 小数 或者 整数 (可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数若干空格小数(按顺序)可以分成以下几个部分:(可选)一个符号字符(’+’ 或 ‘-’)下述格式之一:至少一位数字,后面跟着一个点 ‘.’至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字一个点 ‘.’ ,后面跟着至少一位数字整数(按顺序)可以分成以下几个部分:(可选)一个符号原创 2021-06-20 12:05:53 · 180 阅读 · 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 · 176 阅读 · 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 · 96 阅读 · 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 · 201 阅读 · 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 · 125 阅读 · 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 · 110 阅读 · 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 · 119 阅读 · 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 · 167 阅读 · 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 · 120 阅读 · 0 评论