Keshawn_lu's Blog

Keshawn_lu's Blog

Become a better myself.

Leetcode 25. K 个一组翻转链表
题目简介:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5 说明: 你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。 思路:首先设置一个翻转链表的函数,能将翻转后的头和...
Leetcode 560. 和为K的子数组
题目简介: 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 示例 1 : 12输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。 说明 : 数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。 思路:首先最先想到的是暴力法,两次循环记录每个子数组的和,若子数组元素和与 k 相等则count++,结果很意料之中的超时了。 所以就开始想其他的方法,我们可以定义一个sum,sum[i]代表的为数组下标从0 ~ ...
Leetcode 136. 只出现一次的数字
题目简介:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 12输入: [2,2,1]输出: 1 示例 2: 12输入: [4,1,2,1,2]输出: 4 思路:使用位运算(异或),因为a ^ a = 0,a ^ a ^ b = 0 ^ b = b,并且位运算符合交换律,所以将数组中所有的数依次位运算以后,出现两次的数的位运算后变为0,所以最后留下来的数便是只出现一次的,即是结果,时间复杂度O(n),空间复杂度O(1)。 tip: 异或相同为0...
Leetcode 102. 二叉树的层序遍历
题目简介: 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例:二叉树:[3,9,20,null,null,15,7], 12345 3 / \9 20 / \ 15 7 返回其层次遍历结果: 12345[ [3], [9,20], [15,7]] 思路:利用队列,先将根节点入队,然后在每次队列出队的过程中(注意出队的循环条件为出队前的队列大小),若左子树或右子树不为空,则加入到队列中,反复直至队列为空。 tip: 每次出队时需要借助vector<int>来存放数据,一次出队结束后,再存入vector<...
Leetcode 155. 最小栈
题目简介: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。 示例: 12345678910111213141516输入:["MinStack","push","push","push","getMin","pop","top","...
Leetcode 50. Pow(x, n)
题目简介:实现 pow(x, n) ,即计算 x 的 n 次幂函数。 示例 1: 12输入: 2.00000, 10输出: 1024.00000 示例 2: 12输入: 2.10000, 3输出: 9.26100 示例 3: 123输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25 说明: -100.0 < x < 100.0 n 是 32 位有符号整数,其数值范围是 [-2^{31}, 2^{31} - 1] 思路:利用递归,将n对半分开,若n为奇数,则用n % 2将剩余的数算出来,最后相乘即可,时间复杂度为O...
Leetcode 236. 二叉树的最近公共祖先
题目简介:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4] 示例 1: 123输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 和节点 1 的最近公共祖先是节点 3。 示例 2: 123输入: roo...
Leetcode 5405. 形成两个异或相等数组的三元组数目
题目简介:给你一个整数数组 arr 。 现需要从数组中取三个下标 i、j 和 k ,其中 (0 <= i < j <= k < arr.length) 。 a 和 b 定义如下: a = arr[i] ^ arr[i + 1] ^ ... ^ arr[j - 1] b = arr[j] ^ arr[j + 1] ^ ... ^ arr[k] 注意:^ 表示 按位异或 操作。 请返回能够令 a == b 成立的三元组 (i, j , k) 的数目。 示例 1: 123输入:arr = [2,3,1,6,7]输出:4解释:满足题意的三元组分别是 (0,1,2...
Leetcode 69. x 的平方根
题目简介:实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 12输入: 4输出: 2 示例 2: 1234输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。 思路:使用二分查找,若循环时,x / mid = mid(防止溢出,即x = mid * mid)或 x / mid > mid && x / (mid + 1) < mid + 1(代表平方根为小数,此时的m...
Leetcode 221. 最大正方形
题目简介:在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 示例: 12345678输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4 思路:利用动态规划的思想,dp[i] [j]代表的是以第i行第j列为正方形右下角坐标的能形成的最大的正方形的边长。 首先将第1行和第1列进行初始化。然后遍历其他的坐标,如果当前坐标为0,即形成不了正方形,dp[i] [j]即为0, 若为1,则比较dp[i - 1] [j] 和 dp[i] [j - 1] 的值,选择两者间较小的值,设为length(如下图的第一个例子,因为dp[i...
avatar
鸣蜩十九
Always
友链
CSDN BiliBili