岛屿数量
题目描述
题目链接:200. 岛屿数量
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例1:
1234567输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1
示例2:
1234567输入:grid = [ ["1",&q ...
买卖股票的最佳时机
题目描述
题目链接:121. 买卖股票的最佳时机
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
示例1:
1234输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
示例2:
123输入:prices = [7,6,4,3,1]输出:0解释:在这种情况下, 没有交易完成, 所以最大利润为 0。
提示:
1 <= prices.length <= 10(5)
0 <= prices[i] <= 10(4)
我的题解方法一:一次遍历思路由题目可得知两个关键信息
只交易一次
当天买入且只 ...
最长回文子串
题目描述
题目链接:5. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例1:
123输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。
示例2:
12输入:s = "cbbd"输出:"bb"
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
我的题解方法一:动态规划思路假设dp[i][j]表示字符串s下标从i~j的子字符串是否为回文串,那么有以下转移方程:
若i==j,表示子字符串有一个字符,为回文串,因此dp[i][j]=true
若i==j-1,表示子字符串有两个字符
若s[i]==s[j],则dp[i][j]=true
若s[i]!=s[j],则dp[i][j]=false
否则表示子字符串拥有两个以上字符
若s[i]==s[j]并且dp[i+1][j-1]==true,则dp[i][j]=true
否则dp ...
无重复字符的最长子串
题目描述
题目链接:3. 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例1:
123输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例2:
123输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例3:
1234输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
提示:
0 <= s.length <= 5 * 10(4)
s 由英文字母、数字、符号和空格组成
我的题解方法一:哈希表+滑动窗口思路使用左右指针记录滑动窗口的左边界和右边界,使用哈希表记录每个字符出现的位置,加速指针移动位置。
遍历字符串,如果 ...
两数相加
题目描述
题目链接:2. 两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例1:
123输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.
示例2:
12输入:l1 = [0], l2 = [0]输出:[0]
示例3:
12输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]输出:[8,9,9,9,0,0,0,1]
提示:
每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零
我的题解方法一:模拟思路我们同时遍历两个链表,逐位计算它们的和,并与进位值相加。如果两个链表的长度不同,则可以认为长度短的链表的后面有若干个0,这样不影响最后的计算结果。
同时,如果最后进位值不为零,也需要再添加一个节点。
代码12 ...
两数之和
题目描述
题目链接:1. 两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例1:
123输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例2:
123输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例3:
12输入:nums = [3,3], target = 6输出:[0,1]
提示:
2 <= nums.length <= 10(4)
-10(9) <= nums[i] <= 10(9)
-10(9) <= target <= 10(9)
只会存在一个有效答案
我的题解方法一:哈 ...
手写LRU算法
功能设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。
实现 LRUCache 类:
LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存
int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。
void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。
函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。
思路LRU缓存机制可以通过哈希表辅以双向链表实现,我们用一个哈希表和一个双向链表维护所有在缓存中的键值对。
双向链表按照被使用的顺序存储了这些键值对,靠近头部的键值对是最近使用的,而靠近尾部的键值对是最久未使用的。
哈希表即为普通的哈希映射(HashMap),通过缓存数据的键映射到其在双向链表中的位置。
这样以来,我们首先使用哈希表进行定位,找出 ...
Spring高级45讲【第六章】:OTHER
FactoryBeanFactoryBean是一个工厂Bean,是用来产生产品对象的,FactoryBean本身是由spring管理的,但其产生的产品类却是部分受到srping的管理,为什么这么说呢?下面做一个试验:
创建一个Bean2,由spring进行管理:
123@Componentpublic class Bean2 {}
创建一个Bean1,注意不直接交由spring管理,没有加@Component注解,但实现了BeanFactoryAware接口,我们看看在Bean1创建的各个时期会不会回调实现的方法。
12345678910111213141516171819202122232425public class Bean1 implements BeanFactoryAware { private static final Logger log = LoggerFactory.getLogger(Bean1.class); private Bean2 bean2; @Autowired public void setBe ...
Spring高级45讲【第五章】:BOOT
构建Boot项目传统方式生成使用IntelliJ IDEA软件,点击文件->新建->项目
左侧选择Spring Initializr,右侧设置项目信息,点击下一步
选择Spring Boot版本,添加依赖
点击创建
SpringBoot项目构建成功,但是我们发现项目中会有很多额外的文件,例如.mvn文件夹、mvnw、mvnw.cmd等文件。
快捷方式生成使用以下命令获取pom.xml:
1curl https://start.spring.io/pom.xml
控制台输出:
1234567891011121314151617181920212223242526272829303132333435363738394041<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema ...
Spring高级45讲【第四章】:WEB
DispatcherServlet及其重要组件DispatcherServlet初始化我们使用可支持内嵌web服务器的容器实现AnnotationConfigServletWebServerApplicationContext,这个容器不仅支持内嵌web服务器,也支持注解配置。
演示代码:
1234567891011121314151617181920212223242526272829public class A20 { private static final Logger log = LoggerFactory.getLogger(A20.class); public static void main(String[] args) throws Exception { AnnotationConfigServletWebServerApplicationContext context = new AnnotationConfigServletWebServerApplicationContext(WebC ...