1 | 给你一个整数数组 nums 和一个整数 k 。 |
排序+双指针
先对数组进行排序,然后利用双指针,分别从0和nums.length-1往中间凑,求和。
1 | class Solution { |
时间复杂度O(nlog(n)),也就是排序的时间复杂度。
1 | 给你一个整数数组 nums 和一个整数 k 。 |
先对数组进行排序,然后利用双指针,分别从0和nums.length-1往中间凑,求和。
1 | class Solution { |
时间复杂度O(nlog(n)),也就是排序的时间复杂度。
1 | 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 |
1 |
|
1 |
|
1 | class Solution { |
参考文献
1 | 作者:LeetCode-Solution |
1 | 有一个二维矩阵 A 其中每个元素的值为 0 或 1 。 |
要想所有的数字的和最大,那么每一个数字都应该是最大数字,为了使二进制数字最大,二进制的最高位应该是1(不含符号位),所以在处理时应将每一行的最高位置为1(先对行处理),对后面的每一列,统计每个列中1的数量是否大于列值的1/2,如果不大于列值的1/2就对该列取反
1 | class Solution { |
1 |
|
1 |
|
参考文献
1 | 作者:LeetCode-Solution |
难度:中等
给你两个版本号 version1
和 version2
,请你比较它们。
版本号由一个或多个修订号组成,各修订号由一个 '.'
连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33
和 0.1
都是有效的版本号。
比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号 1
和修订号 001
相等 。如果版本号没有指定某个下标处的修订号,则该修订号视为 0
。例如,版本 1.0
小于版本 1.1
,因为它们下标为 0
的修订号相同,而下标为 1
的修订号分别为 0
和 1
,0 < 1
。
返回规则如下:
*version1* > *version2*
返回 1
,*version1* < *version2*
返回 -1
,0
。示例 1:
1 | 输入:version1 = "1.01", version2 = "1.001" |
示例 2:
1 | 输入:version1 = "1.0", version2 = "1.0.0" |
示例 3:
1 | 输入:version1 = "0.1", version2 = "1.1" |
示例 4:
1 | 输入:version1 = "1.0.1", version2 = "1" |
示例 5:
1 | 输入:version1 = "7.5.2.4", version2 = "7.5.3" |
提示:
1 <= version1.length, version2.length <= 500
version1
和 version2
仅包含数字和 '.'
version1
和 version2
都是 有效版本号version1
和 version2
的所有修订号都可以存储在 32 位整数 中1 |
|
1 |
|
1 | class Solution { |
参考文献
难度中等953
给你一个整数数组 nums
,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
示例 1:
1 | 输入: [2,3,-2,4] |
示例 2:
1 | 输入: [-2,0,-1] |
分情况讨论:
如果当前的值是正的,要与最大值做乘法才能得到最大值
如果当前的值是负的,要与最小值做乘法才能得到最大值
1 | public class Solution { |
因为数字中有正数和负数,正数乘以最大值结果最大,负数乘以最小值结果最大,所以要维护两个表格,一个用来存放当前的最大值一个用来存放当前的最小值。
最后从最大值表中选择最大的一个值即为结果,因为在相乘的过程中子数组要是连续的才可以,中间有正负相间时,不是连续的,所以最大值不是连续的,要从中选择最大的那个值。
1 | class Solution { |
1 | class Solution { |
时间复杂度O(n),空间复杂度O(n)
由于第 i 个状态只和第 i−1 个状态相关,根据「滚动数组」思想,我们可以只用两个变量来维护 i−1 时刻的状态,一个维护 fmax,一个维护fmin
1 |
|
时间复杂度O(n),空间复杂度O(1)
参考文献
作者:LeetCode-Solution
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1 | 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 |
深度优先遍历,将遍历过的元素置为非’0’和’1’的字符,统计所有入口的数量
1 | class Solution { |
1 | class Solution { |
1 | class Solution { |
同样地,我们也可以使用并查集代替搜索。
为了求出岛屿的数量,我们可以扫描整个二维网格。如果一个位置为 1,则将其与相邻四个方向上的 1 在并查集中进行合并。
最终岛屿的数量就是并查集中连通分量的数目。
1 |
|
时间复杂度:O(MN∗α(MN)),其中 M 和 N 分别为行数和列数。注意当使用路径压缩(见 find 函数)和按秩合并(见数组 rank)实现并查集时,单次操作的时间复杂度为α(MN),其中α(x) 为反阿克曼函数,当自变量 x 的值在人类可观测的范围内(宇宙中粒子的数量)时,函数 α(x) 的值不会超过 5,因此也可以看成是常数时间复杂度。
空间复杂度:O(MN),这是并查集需要使用的空间。
参考文献
作者:LeetCode
链接:https://leetcode-cn.com/problems/number-of-islands/solution/dao-yu-shu-liang-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1 | 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 |
1 | 输入:head = [3,2,0,-4], pos = 1 |
1 | 输入:head = [1,2], pos = 0 |
1 | 输入:head = [1], pos = -1 |
使用快指针和慢指针,快指针走的路径是慢指针的两倍,等快指针与慢指针相遇时,只需要从链表头上使用一个指针ptr(也是慢指针)向后移动,最终慢指针和ptr会在入环点相遇
1 | public class Solution { |
1 | 假设按照升序排序的数组在预先未知的某个点上进行了旋转。例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] 。 |
(a)把P1指向数组的第一个数字,P2指向数组的最后一个数字。由于P1和P2中间的数字5大于P1指向的数字,中间的数字在第一个子数组中。下一步把P1指向中间的数字。
(b)P1和P2中间的数字1小于P2指向的数字,中间的数字在第二个子数组中。下一步把P2指向中间的数字。
(c)P1和P2指向两个相邻的数字,则P2指向的是数组中的最小数字。
此时两个指针的距离是1,表明第一个指针已经指向了第一个递增子数组的末尾,而第二个指针指向第二个递增子数组的开头。
1 | class Solution { |
1 | class Solution { |
参考文献
剑指offer
1 | 给定一个字符串,逐个翻转字符串中的每个单词。 |
java split字符串中的所有空格要用s.split("\\s+");
1 | class Solution { |
优美的代码
1 | class Solution { |
1 | class Solution { |
1 |
|
参考文献
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/reverse-words-in-a-string/solution/
fan-zhuan-zi-fu-chuan-li-de-dan-ci-by-leetcode-sol/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1 | 根据 逆波兰表示法,求表达式的值。 |
使用栈
1 | class Solution { |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true