- 博客(32)
- 收藏
- 关注
原创 力扣---贪心算法
但仔细思考一下就发现:如果把气球排序之后,从前到后遍历气球,被射过的气球仅仅跳过就行了,没有必要让气球数组remove气球,只要记录一下箭的数量就可以了。直觉上来看,貌似只射重叠最多的气球,用的弓箭一定最少,那么有没有当前重叠了三个气球,我射两个,留下一个和后面的一起射这样弓箭用的更少的情况呢?如果真实的模拟射气球的过程,应该射一个,气球数组就remove一个元素,这样最直观,毕竟气球被射了。既然按照起始位置排序,那么就从前向后遍历气球数组,靠左尽可能让气球重复。从前向后遍历遇到重叠的气球了怎么办?
2023-10-07 23:19:54 119
原创 线程池的复习
如果当前同时运行的线程数超过最大线程数且队列也充满了任务,则会制定一些策略:4个策略ThreadPoolAbortPolicy策略---抛出RejectedExecutionException异常,拒绝新任务的处理ThreadPoolCallerRunPolicy策略---调用自己的线程来执行任务,也就是在执行executor的线程中调用任务的方法。如果执行程序已关闭,则会丢弃该任务。因此这种策略会降低对于新任务提交速度,影响程序的整体性能。
2023-09-23 22:30:31 38
原创 回顾线程知识
synchronized(共享对象){同步代码块}原理:每一个java对象都有一把锁,当第一个线程遇到synchronized关键字,就把共享对象的锁占有,第二个线程遇到synchronized时,也需要占有对象锁,但是,目前对象锁被第一个线程占有。这就是多线程的应用,多线程可以提高程序的执行效率,即为并发。start()方法具有很大的作用,目的是开启线程,创建新的分支栈,创建完成就执行结束。实例方法:join()合并线程,多线程变为单线程,当前线程阻塞,t线程执行,t线程执行完毕以后,当前线程执行。
2023-09-21 22:27:19 37
原创 力扣---贪心算法
大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。然后从后向前遍历小孩数组,用大饼干优先满足胃口大的,并统计满足小孩数量。可以尝试使用贪心策略,先将饼干数组和小孩数组排序。局部最优推出全局最优,并举不出反例,那么试试贪心!为了满足更多的小孩,就不要造成饼干尺寸的浪费。(为方便表述,以下说的峰值都是指局部峰值)
2023-09-18 22:35:41 94
原创 力扣---二叉树
因为是有序树,所有 如果 中间节点是 q 和 p 的公共祖先,那么 中节点的数组 一定是在 [p, q]区间的。首先如果不是二叉搜索树的话,应该怎么解题,是二叉搜索树,又应该如何解题,两种方式做一个比较,可以加深大家对二叉树的理解。如果不是二叉搜索树,最直观的方法一定是把这个树都遍历了,用map统计频率,把频率排个序,最后取前面高频的元素的集合。题目的同学应该知道,利用回溯从底向上搜索,遇到一个节点的左子树里有p,右子树里有q,那么当前节点就是最近公共祖先。,二叉搜索树可是有序的。
2023-09-12 22:29:26 46
原创 数据结构---树
刚刚我们说过了二叉树有两种存储方式顺序存储,和链式存储,顺序存储就是用数组来存,这个定义没啥可说的,我们来看看链式存储的二叉树节点的定义方式。int val;123456大家会发现二叉树的定义 和链表是差不多的,相对于链表 ,二叉树的节点里多了一个指针, 有两个指针,指向左右孩子。这里要提醒大家要注意二叉树节点定义的书写方式。在现场面试的时候 面试官可能要求手写代码,所以数据结构的定义以及简单逻辑的代码一定要锻炼白纸写出来。
2023-09-09 23:47:07 41
原创 力扣---用栈表示队列
使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈。这是一道模拟题,不涉及到具体算法,考察的就是对栈和队列的掌握程度。,这里要注意输入栈和输出栈的关系。
2023-09-06 22:13:40 96 1
原创 力扣---螺旋矩阵
可以发现这里的边界条件非常多,在一个循环中,如此多的边界条件,如果不按照固定规则来遍历,那就是。而求解本题依然是要坚持循环不变量原则。由外向内一圈一圈这么画下去。
2023-09-04 00:18:51 83 1
原创 力扣---长度最小的子数组
在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。首先要思考 如果用一个for循环,那么应该表示 滑动窗口的起始位置,还是终止位置。如果只用一个for循环来表示 滑动窗口的起始位置,那么如何遍历剩下的终止位置?所以 只用一个for循环,那么这个循环的索引,一定是表示 滑动窗口的终止位置。那么滑动窗口如何用一个for循环来完成这个操作呢。此时难免再次陷入 暴力解法的怪圈。
2023-09-02 22:05:32 49 1
原创 力扣第997到---有序数组的平方
定义一个新数组result,和A数组一样的大小,让k指向result数组终止位置。那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。数组其实是有序的, 只不过负数平方之后可能成为最大数了。此时可以考虑双指针法了,i指向起始位置,j指向终止位置。
2023-09-02 22:03:16 41 1
原创 数据结构与算法:栈与队列
我们知道线性表具有序偶的逻辑关系,它在计算机物理存储的方式有两种:顺序存储与链式存储,具体的存储方式,我们在前面简单叙述过了。今天我们学习线性表中具有特殊性质的两种抽象数据类型:栈与队列;一、栈(Stack)1.栈的定义:一种特殊的线性表,具有先进后出的特点。举例:手枪(最先装进去的子弹最后打出)、手电筒(最先装进去的电池最后去出)。2.相关名词简述:a.栈顶对应表尾,栈尾对应表头,一切进行的删除与插入操作都是在栈顶(表尾)进行;b.入栈:插入一个元素到栈顶 出栈:在栈顶删除一个元素
2022-04-29 11:34:19 116
原创 数据结构绪论
引言:《数据结构与算法》这一门课可以理解为承上启下的一门课程。前期我们学习了一种或者多种高级程序设计语言以及离散数学和概率论,这些课程帮助我们对于一些数学模型有初刻认知,帮助我们学习数据结构与算法。后期,我们还会学习《计算机操作系统》、《数据库》等等课程。而《数据结构与算法》是为了后期这些课程做准备。所以,学好数据结构与算法是十分重要的。但是,数据结构与算法具有很多抽象的概念,不利于我们理解,这篇文章将用大白话帮助初学者来理解里面众多的概念与逻辑。欢迎大家评论区指出文中的错误,毕竟本人也是菜鸡一个。
2022-04-03 10:43:31 287
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人