博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第八天..
阅读量:38364 次
发布时间:2022-02-15

本文共 4374 字,大约阅读时间需要 14 分钟。

练习

保证文件名唯一

给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用,系统会以 (k) 的形式为新文件夹的文件名添加后缀,其中 k 是能保证文件名唯一的 最小正整数 。返回长度为 n 的字符串数组,其中 ans[i] 是创建第 i 个文件夹时系统分配给该文件夹的实际名称。 示例 1:输入:names = ["pes","fifa","gta","pes(2019)"]输出:["pes","fifa","gta","pes(2019)"]解释:文件系统将会这样创建文件名:"pes" --> 之前未分配,仍为 "pes""fifa" --> 之前未分配,仍为 "fifa""gta" --> 之前未分配,仍为 "gta""pes(2019)" --> 之前未分配,仍为 "pes(2019)"示例 2:输入:names = ["gta","gta(1)","gta","avalon"]输出:["gta","gta(1)","gta(2)","avalon"]解释:文件系统将会这样创建文件名:"gta" --> 之前未分配,仍为 "gta""gta(1)" --> 之前未分配,仍为 "gta(1)""gta" --> 文件名被占用,系统为该名称添加后缀 (k),由于 "gta(1)" 也被占用,所以 k = 2 。实际创建的文件名为 "gta(2)" 。"avalon" --> 之前未分配,仍为 "avalon"示例 3:输入:names = ["onepiece","onepiece(1)","onepiece(2)","onepiece(3)","onepiece"]输出:["onepiece","onepiece(1)","onepiece(2)","onepiece(3)","onepiece(4)"]解释:当创建最后一个文件夹时,最小的正有效 k 为 4 ,文件名变为 "onepiece(4)"。示例 4:输入:names = ["wano","wano","wano","wano"]输出:["wano","wano(1)","wano(2)","wano(3)"]解释:每次创建文件夹 "wano" 时,只需增加后缀中 k 的值即可。示例 5:输入:names = ["kaido","kaido(1)","kaido","kaido(1)"]输出:["kaido","kaido(1)","kaido(2)","kaido(1)(1)"]解释:注意,如果含后缀文件名被占用,那么系统也会按规则在名称后添加新的后缀 (k) 。 提示:1 <= names.length <= 5 * 10^41 <= names[i].length <= 20names[i] 由小写英文字母、数字和/或圆括号组成。

代码

class Solution {    public String[] getFolderNames(String[] names){        Map
map = new HashMap<>();//哈希表 for (int i =0; i< names.length; i++) { if(map.containsKey(names[i])){//比哈希值 如果有 就继续 没有就跳出 int k=map.get(names[i]);//一开始都是1 //当map里面存在一个例如 so(1)时 判断map存在so(1) k++ while (map.containsKey((names[i])+"("+k+")")){ k++; } map.put(names[i],k);//接着放入so(2) names[i] = names[i]+"("+k+")"; } map.put(names[i],1);//每个放入的字符串从1开始 } return names; }}

我的第一眼想的是暴力枚举

先比值 从后倒着来 然后出现相同的记录一次 最后再赋值

然后我就这么写了 写了一半突然想看看别人的

发现还有个hash值这个东西

tmd 学了,雀氏学了,但是用的时候总是记不起来

有了hash值就更好解决了

  1. 比哈希值,没有就直接存入

  1. 有相同哈希值,记录k值有多少

  1. 判断 是否存在name相同的名字的 有就k+1

  1. 接着放入map里面

  1. ps:11 12行代码顺序不同 执行的时间也不同

八股

并行和并发有什么区别?

并行是同一时间多件事情同时发生 也就是说 在不同实体上的多个事件同时发生

并发是同一时间多件事情间隔发生 在同一实体上的多个事件间隔发生

并发可以让处理器充分发挥性能

线程和进程的区别

一个程序有多个进程 一个进程可以有多个线程 线程是cpu调度和分派的基本单位

进程有自己的内存单元 多个线程共享内存资源 而线程是进程的一个实体,同一个进程

的多个线程可以并发执行

守护线程是什么

服务线程,就是服务其他的线程

创建线程有哪几种方式?

继承thread类线程 runnable接口创建线程 通过callable和future创建线程

常用的是前两类

都是通过run方法开启线程对象,不过一个是继承,一个是实现接口

都要用start方法启动线程

nignx第一天

怎么docker安装的

我是看这位大神的

附上代码

找nginxdocker search nginx拉取最新的docker pull nginx查看docker images跑容器 -d后台允许 --name 自定义名字 -p 映射主机端口:容器内部端口 nginx 你下载的版本 默认最新docker run -d --name mynginx -p 3344:80 nginx修改配置环境方法1进容器操作docker exec -it mynginx /bin/bash进入到nginx容器内部后,我们可以cd /etc/nginx,可以看到相关的nginx配置文件都在/etc/nginx目录下而nginx容器内的默认首页html文件目录为/usr/share/nginx/html日志文件位于/var/log/nginx执行exit命令我们可以从容器内部退出。方法2将nginx容器内部配置文件挂载到主机详细看大神https://blog.csdn.net/weixin_46244732/article/details/114315708?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-114315708-blog-123507820.pc_relevant_default&spm=1001.2101.3001.4242.1&utm_relevant_index=3或者https://blog.csdn.net/BThinker/article/details/123507820PS为啥说喜欢用容器docker run -d --name nginx01 -p 3344:80 nginxdocker run -d --name nginx02 -p 3355:80 nginx两行代码 拉了两个nginx了 学习阶段又不是工作阶段 当然是越简单越好反正到工作了还是得一个一个对着电脑配置环境真当自己学了就会了反正我不会 另外附上访问地址  linux虚拟机地址:3344 eg:http://192.168.179.130:3344/

方法2快速链接 //

中间出现ipv4转发问题

是看这位大神的

使用nignx

例如进入容器后nignx -s stop 快速停止 .........quit 优雅关闭.........reload 重新加载配置

其他命令

关于防火墙关闭防火墙systemctl stop firewalld.service禁止防火墙开机启动systemctl disable firewalld.service放行端口firewall-cmd --zone=public --add-port=80/tcp --permanent重启防火墙firewall-cmd --reload安装成系统服务创建服务脚本(自动开启)vi /usr/lib/systemd/system/nginx.service服务脚本内容[Unit]Description=nginx - web serverAfter=network.target remote-fs.target nss-lookup.target[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pidExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.confExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.confExecReload=/usr/local/nginx/sbin/nginx -s reloadExecStop=/usr/local/nginx/sbin/nginx -s stopExecQuit=/usr/local/nginx/sbin/nginx -s quitPrivateTmp=true[Install]WantedBy=multi-user.target重新加载系统服务systemctl daemon-reload启动服务systemctl start nginx.service开机启动systemctl enable nginx.service

硅谷老师有个自启动服务脚本 可能docker以后会用到,记录一下

今天偷懒了,才第八天 惭愧,也不立flag

明天继续

你可能感兴趣的文章
插件机制+自定义axios(五)
查看>>
Redis的学习之路
查看>>
Windows下Redies+GUI安装,使用Jedis与spring boot 整合
查看>>
Windows创建本地版本库(1)
查看>>
解决"nothing added to commit but untracked files present"
查看>>
基于java的酒店管理系统的设计与实现
查看>>
基于WEB的仓库管理系统的设计与实现
查看>>
基于java的web聊天系统
查看>>
基于java的俄罗斯方块的设计与实现
查看>>
基于java的魂斗罗的设计
查看>>
基于java的网页内容管理
查看>>
基于java的学生管理系统
查看>>
基于java网盘搜索的设计与实现
查看>>
基于SSM的仿小米商城源码
查看>>
基于SSM的医院人事管理系统的设计与实现
查看>>
基于SSM的网上购物系统的设计与开发
查看>>
基于SSM框架的BS微博系统的设计与实现
查看>>
超市订单管理系统
查看>>
基于ssm的民宿网站
查看>>
基于JavaWeb的物流管理系统的设计与实现
查看>>