七月伊始 LeetCode算法总结
七月伊始
早上买了LeetCode的课程,解锁了付费题目,付费倒逼学习;
意识到这么久学习的东西,都是写在自己的笔记, 如今希望自己能够用自己拙笔记录这个学习和总结的过程。
队列的学习
设计循环队列
设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。
循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。
你的实现应该支持如下操作:
MyCircularQueue(k)
: 构造器,设置队列长度为 k 。Front
: 从队首获取元素。如果队列为空,返回 -1 。Rear
: 获取队尾元素。如果队列为空,返回 -1 。enQueue(value)
: 向循环队列插入一个元素。如果成功插入则返回真。deQueue()
: 从循环队列中删除一个元素。如果成功删除则返回真。isEmpty()
: 检查循环队列是否为空。isFull()
: 检查循环队列是否已满。
class MyCircularQueue {
private int[] data;
private int size;
private int head; //头指针
private int tail; //尾指针
public MyCircularQueue(int k) {
this.data = new int[k];
this.size = 0;
this.head = -1;
this.tail = -1;
}
public boolean enQueue(int value) {
if(size == data.length){
return false;
}
tail = (tail + 1)%data.length;
data[tail] = value;
if(size == 0){
head = tail;
}
size++;
return true;
}
public boolean deQueue() {
if(size == 0){
return false;
}
head = (head+1)%data.length;
size--;
return true;
}
public int Front() {
if(size == 0){
return -1;
}
return data[head];
}
public int Rear() {
if(size == 0){
return -1;
}
return data[tail];
}
public boolean isEmpty() {
return size == 0;
}
public boolean isFull() {
return size == data.length;
}
}
数据流中的移动平均值
给定一个整数数据流和一个窗口大小,根据该滑动窗口的大小,计算其所有整数的移动平均值。
class MovingAverage {
int size = 0;
List<Integer> list = new ArrayList<Integer>();
/** Initialize your data structure here. */
public MovingAverage(int size) {
this.size = size;
}
public double next(int val) {
int count = 0;
list.add(val);
if(list.size() < this.size){
for(int j=0;j<list.size();j++){
count += list.get(j);
}
return (double)count/list.size();
}
for(int i=list.size()-1;i>(list.size()-1-this.size);i--){
count += list.get(i);
}
return (double)count/this.size;
}
}
(春招问道了类似的题目, 酷家面试二面的,一面问我全部关于链表的,二面全是队列的)
墙与门
你被给定一个 m × n 的二维网格,网格中有以下三种可能的初始化值:
-1
表示墙或是障碍物0
表示一扇门INF
无限表示一个空的房间。然后,我们用231 - 1 = 2147483647
代表INF
。你可以认为通往门的距离总是小于2147483647
的。
你要给每个空房间位上填上该房间到 最近 门的距离,如果无法到达门,则填 INF
即可。
宽度优先搜索
与其从一个空的房间开始找门,我们何不按另一种方式来搜索?换言之,我们从门开始做宽度优先搜索。由于宽度优先搜索保证我们在搜索 d + 1 距离的位置时, 距离为 d 的位置都已经被搜索过了,所以到达每一个房间的时候都一定是最短距离。
private static final int EMPTY = Integer.MAX_VALUE;
private static final int GATE = 0;
private static final List<int[]> DIRECTIONS = Arrays.asList(
new int[] { 1, 0},
new int[] {-1, 0},
new int[] { 0, 1},
new int[] { 0, -1}
);
public void wallsAndGates(int[][] rooms) {
int m = rooms.length;
if (m == 0) return;
int n = rooms[0].length;
Queue<int[]> q = new LinkedList<>();
for (int row = 0; row < m; row++) {
for (int col = 0; col < n; col++) {
if (rooms[row][col] == GATE) {
q.add(new int[] { row, col });
}
}
}
while (!q.isEmpty()) {
int[] point = q.poll();
int row = point[0];
int col = point[1];
for (int[] direction : DIRECTIONS) {
int r = row + direction[0];
int c = col + direction[1];
if (r < 0 || c < 0 || r >= m || c >= n || rooms[r][c] != EMPTY) {
continue;
}
rooms[r][c] = rooms[row][col] + 1;
q.add(new int[] { r, c });
}
}
}
七月伊始 LeetCode算法总结的更多相关文章
- leetcode算法: Find Bottom Left Tree Value
leetcode算法: Find Bottom Left Tree ValueGiven a binary tree, find the leftmost value in the last row ...
- LeetCode算法题-Subdomain Visit Count(Java实现)
这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...
- LeetCode算法题-Number of Lines To Write String(Java实现)
这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...
- LeetCode算法题-Unique Morse Code Words(Java实现)
这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...
- LeetCode算法题-Rotate String(Java实现)
这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...
- LeetCode算法题-Rotated Digits(Java实现)
这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...
- LeetCode算法题-Letter Case Permutation(Java实现)
这是悦乐书的第315次更新,第336篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第184题(顺位题号是784).给定一个字符串S,将每个字母单独转换为小写或大写以创建另 ...
- LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)
这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...
- LeetCode算法题-Jewels and Stones(Java实现)
这是悦乐书的第313次更新,第334篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第182题(顺位题号是771).字符串J代表珠宝,S代表你拥有的石头.S中的每个字符都是 ...
随机推荐
- Spring Boot应用启动器
SpringBoot应用启动器基本的一共有44种,具体如下: 1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2)spring-b ...
- 没有重写接口方法,IDEA没有报错。
今天在IDEA写拦截器的时候遇到点困惑,继承了HandlerInterceptor没有报错,我一直认为他会提醒,要重写方法.如下图 通过查资料,嗯,终于找到原因来,先来上HandlerIntercep ...
- hdu1495-非常可乐-(倒水问题bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1495 题解: 1.最少次数?江湖套路,bfs.2.怎么倒?从一个杯子倒到另一个杯子.3.倒多少?因为没有刻度,所 ...
- 在Chrome上运行安卓(ARC环境)
测试时所用Chrome版本为67 (Win10 64bit) 1,安装ARC Welder插件(100多M):https://chrome.google.com/webstore/detail/arc ...
- 解决 ora-01795 的问题
''' <summary> ''' 在 oracle 里 , where in 语句有可能造成问题 : ORA-01795:列表中的最大表达式数为1000 ''' 如果我们在拼接where ...
- oracle--10GRAC集群(NFS共享存储)
一,NFS服务器配置 01, 安装包查看 [root@standby2 ~]# rpm -qa|grep nfs nfs-utils-lib--.el6.x86_64 nfs4-acl-tools-- ...
- kubernetes实战(九):k8s集群动态存储管理GlusterFS及使用Heketi扩容GlusterFS集群
1.准备工作 所有节点安装GFS客户端 yum install glusterfs glusterfs-fuse -y 如果不是所有节点要部署GFS管理服务,就在需要部署的节点上打上标签 [root@ ...
- 版本分支管理标准 - Git Flow
最近好多开发人员在问如何使用 GIT 进行代码的版本管理. 这里转发一个标准的分支版本控制图. 相关的详细介绍,可以看: <引入git flow分支管理> <非常清晰明了的GIT版本 ...
- linux下发布项目
查看端口
- 基于Laravel框架下使用守护进程supervisor实现定时任务(毫秒)
本篇文章给大家带来的内容是关于基于Laravel框架下使用守护进程supervisor实现定时任务(毫秒),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 公司需要实现X分钟内每隔Y秒 ...