LeetCode笔记
RetenQ
C'est-la-vie
展开
-
LeetCode0015-三数之和
双指针利用双指针的搜索,实质上双指针那部分很简单记录本题主要是为了记录思想题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]题原创 2021-10-31 22:12:52 · 83 阅读 · 0 评论 -
LeetCode0088-合并两个有序数组
双指针利用有序数组的特性进行合并题目给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。示例 1:原创 2021-10-31 22:12:02 · 73 阅读 · 0 评论 -
LeetCode0026-双指针删除重复项
双指针——快慢指针可以比较好诠释"快慢指针"用法的一道题题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。示例 2:输入:原创 2021-10-31 22:11:06 · 97 阅读 · 0 评论 -
LeetCode0011-盛最多水的容器
双指针“双指针是用来优化解的,不是拿来暴力的”如果双指针被用于遍历,那就没有意义了,我还不如整个for利用条件判断以及范围减小判断,利用双指针的优势,得到优解题目给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:4原创 2021-10-31 22:09:57 · 77 阅读 · 0 评论 -
LeetCode0136-利用异或来查找“只出现一次的数字“
位运算非常巧妙地利用了位运算中异或的性质题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4题解利用异或的性质1.任何数和自己异或,结果是02.异或满足交换律和结合律3.任何数和0异或,都会得到本身根据题意和1,2的性质,我们能知道:本题中出现两次的元素,最终是会和自己消去的因为交换、结合律,我们最后会把那些出现两次的元素变为0消掉原创 2021-10-31 22:08:10 · 92 阅读 · 0 评论 -
LeetCode0231-用位运算判断一个数是否是2的幂
位运算经典之一个数是不是二的幂题目给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。示例 1:输入:n = 1输出:true解释:20 = 1示例 2:输入:n = 16输出:true解释:24 = 16示例 3:输入:n = 3输出:false题解两个原理:1.如果一个数是2的幂,那么它的二进制表达有且仅有一个1(这个1就是它的最高位)2原创 2021-10-31 22:07:04 · 245 阅读 · 0 评论 -
LeetCode0191-利用位运算计算1的个数
位运算同意利用了位运算的特殊性质n&(n-1)的用法题目编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符原创 2021-10-31 22:05:48 · 115 阅读 · 0 评论 -
LeetCode0021-用递归合并链表
递归题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序 排列题解简单粗原创 2021-10-31 22:03:48 · 124 阅读 · 0 评论 -
LeetCode0695-海岛岛屿最大面积
深度搜索经典之海岛岛屿题目给你一个大小为 m x n 的二进制矩阵 grid 。岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。岛屿的面积是岛上值为 1 的单元格的数目。计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。题解注意,要我们计算的是最大的海岛岛屿面积,而不是这篇区域的面积和我们先一步步来,首先对于每一点,我们要怎么进行上下左右原创 2021-10-30 10:59:18 · 169 阅读 · 0 评论 -
LeetCode0733-染色问题
深度搜索和海岛问题一样的,最基础最经典的两道搜索问题这里使用深度搜索解答题目有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,原创 2021-10-30 10:58:19 · 356 阅读 · 0 评论 -
LeetCode0567-字符串的排列,判断 s2 是否包含 s1 的排列
滑动窗口中间一些步骤很好的诠释了“滑动窗口”的思想题目给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。换句话说,s1 的排列之一是 s2 的 子串 。示例 1:输入:s1 = “ab” s2 = “eidbaooo”输出:true解释:s2 包含 s1 的排列之一 (“ba”).示例 2:输入:s1= “ab” s2 = “eidboaoo”输出:false提示:1 <= s1.length原创 2021-10-30 10:57:56 · 833 阅读 · 0 评论 -
LeetCode0283-移动零
双指针比较具有利用指针特性的一题题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]题解因为想用双指针所以用了双指针,但是个人感觉对双指针的理解还是比较有利的 主要是利用两个指针checker和book,前者用来遍历,后者用来处理 核心在于:当checker检测到0的时候,book不会行动 而当其检测到非零数的时候,book会更新且移动 当ch原创 2021-10-30 10:52:11 · 59 阅读 · 0 评论 -
LeetCode0852-山脉函数
二分查找旨在说明二分法则的比较条件可以看情况设置更合适的题目符合下列属性的数组 arr 称为 山脉数组 :arr.length >= 3存在 i(0 < i < arr.length - 1)使得: arr[0] < arr[1] < ... arr[i-1] < arr[i] arr[i] > arr[i+1] > ... > arr[arr.length - 1]给你由整数组成的山脉数组 arr ,返回任何满足 arr[原创 2021-10-30 10:51:06 · 153 阅读 · 0 评论 -
LeetCode0189-旋转数组
其它骚操作的解法还有两种,这里只记录了我能理解的,最简单粗暴的那个https://leetcode-cn.com/problems/rotate-array/solution/xuan-zhuan-shu-zu-by-leetcode-solution-nipk/题目给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5原创 2021-10-30 10:50:12 · 74 阅读 · 0 评论 -
LeetCode0069-平方根排序
二分查找一句话:干就完了题目给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。题解直接干,不管牛顿什么什么的,我们做这题就是练二分也不要用什么数学上的定理,老老实实做二分class Solution { public int mySqrt(int x) { int result = -1 ;原创 2021-10-30 10:47:59 · 89 阅读 · 0 评论 -
LeetCode0035-搜索插入
二分查找二分查找,这题的重点主要在于范围和条件的判断题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。题解Aclass Solution { public int searchInsert(int[] nums, int target) { int left = 0 ; int right = nums.length - 1 ;原创 2021-10-30 10:45:07 · 69 阅读 · 0 评论