力扣每日一刷(2023.9.18)
本篇主要详细学习买卖股票的最佳时机系列的题目
买卖股票的最佳时机题目:
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
示例 2:输入:prices = [7,6,4,3,1]输出:0解释:在这种情况下, 没有交易完成, 所以最大利润为 0。
思路前面我们已经做了一道树形dp的题目, 所以我们的思路就可以往这方面靠一下。
回归到题目 本身, 他需要从这笔交易中获取的最大利润 ,而我们就需要再相对最小的价格 ...
力扣每日一刷(2023.9.15)
打家劫舍Ⅰ题目 :
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
示例 1:
输入:[1,2,3,1]
输出:4
解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。
示例 2:
输入:[2,7,9,3,1]
输出:12 解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。 偷窃到的最高金额 = 2 + 9 + 1 = 12 。
提示:
0 <= nums.length <= 100
0 <= nums[i] <= 400
...
Java线程
进程线程程序
就是为了完成特定的任务,用某种语言编写的一组指令的集合。简单的说就是我们写的代码
进程
进程是指运行中的程序,比如QQ,就启动了一个进程,操作系统就会为该进程分配内存空间。当我们使用其他程序的时候,就又启动了一个进程,操作系统就会为其他进程分配新的内存空间
进程是程序的一次执行过程,或者是正在运行的一个程序。
是一个动态的过程,有他自身的产生、存在和消亡的过程
下面就是几个进程
线程
线程是由进程创建的,是进程的一个实体
一个进程可以拥有多个线程,如下图【同一个应用迅雷 下载多个内容,就产生多个线程】
多线程: 同一时刻,可以执行多个进程,比如上面的迅雷同时下载多个文件
单线程:同一时刻,只允许执行一个线程
并发 : 同一时刻 , 多个任务交替执行, 造成一种‘貌似同时’ 的错觉, 简单的说,单核cpu实现的多任务就是并发
看上去他们同时进行,但是在任意时间段内,他们都是相互交错执行的
比如 : ‘人的大脑一边说话,一边写字 ’
并行 :同一时刻, 多个任务同时执行。多核cpu可以实现并行
线程使用的两种方式
当一个类继承Thread类, 那么该类就可 ...
时间API的使用
几种时间API
java.util.Date和java.util.Calendar:这两个类是Java早期的时间API,已经过时,不推荐使用。
java.time包:Java 8引入了一个新的时间API,该API包括多个类,例如:
LocalDate:表示日期,例如2021-10-01。
LocalTime:表示时间,例如14:30:00。
LocalDateTime:表示日期和时间,例如2021-10-01T14:30:00。
ZonedDateTime:表示带时区的日期和时间。
Period:表示日期之间的时间差。
Duration:表示时间之间的时间差。
无解的ChronoUnit : 获取时间的天数、分钟、月份、 年份…..
java.sql.Date和java.sql.Time:这两个类是Java中用于处理数据库时间的API,通常情况下不需要使用。
我们常用的就是time包下的时间API 以及 Util包下的
Java. timeLocalDate:表示日期例如2021-10-01。对于LocalDate 这是实现类 ,我们可以进行很多操作, 一般我们可以和Period ...
Stream流式编程
介绍Java中的Stream是一种流式编程方式,主要用于对集合数据进行操作和处理。Stream可以让我们更加简单、高效、灵活地处理集合数据,避免了繁琐的循环和判断,同时也提高了代码的可读性和可维护性。
Stream主要包括以下几个特点:
集合元素的处理是通过Stream的一系列中间操作来完成的,例如过滤、排序、映射等。
Stream的中间操作是惰性求值的,只有当终止操作调用时才会执行。
Stream的终止操作会触发中间操作的执行,并返回一个结果,例如收集、计数、查找等。
实现对于Stream流式编程方式 ,我们实现起来就按照三步进行执行即可。
1. 得到Stram流首先我们要做的就是得到stream,对于不同的数据存储类型,得到的Stream流是不同的
下图是几种常见的方式 :
2. 中间操作使用Stream流常见的中间操作的方法应该是filter
但是除了filter ,我们还有很多其他的操作方法 ,比如Sorted 、limit 、skip 、 distinct 、 concat 、 map
下图是这几种方法的介绍。
常见的filter等操作实现:
123456789 ...
Dp练习
题目描述
上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。
路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。
输入描述输入的第一行包含一个整数 N (1≤N≤100)N (1≤N≤100),表示三角形的行数。
下面的 N 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。
输出描述输出一个整数,表示答案。
输入输出样例示例
输入
123456573 88 1 02 7 4 44 5 2 6 5
输出
127
思路这道题是我刷代码随想录以来第一道现实中出现的题, 刚开始拿到题没什么思路 。所以就学着Carl慢慢一步一步分析,虽然最后思路是对的 ,但是实现起来很多的代码细节还是没有完全掌握 。所以写出来记一记
首先我们可以知道 ,它的每一个路径的起源都是从上一条路径得到的,那么就可以得出使用dp的想法
其次 ,题目中提及路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边 ...
Daily-Blog项目后台日志
博客后台
AOP实现日志记录需求通过日志记录接口调用信息,便于后期排查
格式如下 :
实现
先定义注解类
12345678910/** * 自定义注解 */@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface SystemLog { String businessName();}
定义切面类
123456789/** * 切面类 */@Component@Aspect@Slf4jpublic class LogAspect {}
定义切点,及其通知方法
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768@Component@Aspect@Slf4jpublic class LogAspect { ...
动归背包2
474. 一和零
力扣题目链接
给你一个二进制字符串数组 strs 和两个整数 m 和 n 。
请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 。
如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。
示例 1:
输入:strs = [“10”, “0001”, “111001”, “1”, “0”], m = 5, n = 3
输出:4
解释:最多有 5 个 0 和 3 个 1 的最大子集是 {“10”,”0001”,”1”,”0”} ,因此答案是 4 。 其他满足题意但较小的子集包括 {“0001”,”1”} 和 {“10”,”1”,”0”} 。{“111001”} 不满足题意,因为它含 4 个 1 ,大于 n 的值 3 。
示例 2:
输入:strs = [“10”, “0”, “1”], m = 1, n = 1
输出:2
解释:最大的子集是 {“0”, “1”} ,所以答案是 2 。
提示:
1 <= strs.length & ...
深入理解AOP思想
AOP概念 : AOP为Aspect Oriented Programming的缩写, 意思为切面编程。
他是一种可以在不修改原来核心代码的情况下给程序动态统一进增强的一种技术
springAOP : 批量对spring容器中的bean的方法做增强,并且这种增强不会与原来方法中的代码耦合
依赖123456<dependency> <groupId>org.aspect</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.13</version></dependency>
快速入门实现定义切面类1234@Component //将类交给容器去管理@Aspect //作用 : 告诉Spring容器,这是一个切面类public class MyAspect{ }
切入点123456789101112131415@Component //将类交给容器去管理@Aspect / ...
Daily-Blog项目前台日志
daily- blog项目快速搭建项目创建完数据库对应的表 等操作之后,进入idea
使用EasyCode快速创建工程
首先连接数据库
然后在对应的表上点击,然后GeneraleCode
如果想要删除表名中的前缀 ,就可以使用removePre
创建包、实体类、dao等都可以自动生成
自动生成的代码修改根据自己的需求,修改相应的代码 比如 : 删除其中的继承东西等
我们这里暂时不做任何修改
接下来就是修改实体类对应的信息
比如: 我们需要添加实体类与数据库中表的对应关系用 @TableName("sg_article") , 对于主键自增的字段使用@TableId等
1234567891011121314151617181920212223242526272829303132333435363738394041/** * 文章表(Article)表实体类 * * @author Ray2310 * @since 2023-03-11 09:42:17 */@SuppressWarnings("serial")@TableName(" ...