面试经典150题(32-37)
leetcode 150道题 计划花两个月时候刷完,今天(第十五天)完成了6道(32-37)150:
今天刚好有点没精神的感觉,然后碰到的题也不难。。天意!!!
32.(289. 生命游戏)题目描述:
根据 百度百科 , 生命游戏 ,简称为 生命 ,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。
给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态: 1 即为 活细胞 (live),或 0 即为 死细胞 (dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:
如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;
如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;
如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;
如果死细胞周围正好有三个活细胞,则该位置死细胞复活;
下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。给你 m x n 网格面板 board 的当前状态,返回下一个状态。
第一版(这个题只需要记住他是同时发生的,不是一个变了还能影响下一个判断,然后就是模拟遍历就行了)
class Solution {int m;int n;public void gameOfLife(int[][] board) {m=board.length-1;n=board[0].length-1;int[][] res=new int[m+1][n+1];for(int i=0;i<=m;i++){for(int j=0;j<=n;j++){res[i][j]=genOneLife(board,i,j);}}for(int i=0;i<=m;i++){for(int j=0;j<=n;j++){board[i][j]=res[i][j];}}}public int genOneLife(int[][] board,int x,int y){int temp=board[x][y];int aroudLiveCount=0;if(x-1>=0){aroudLiveCount+=board[x-1][y];if(y-1>=0){aroudLiveCount+=board[x-1][y-1];}if(y+1<=n){aroudLiveCount+=board[x-1][y+1];}}if(x+1<=m){aroudLiveCount+=board[x+1][y];if(y-1>=0){aroudLiveCount+=board[x+1][y-1];}if(y+1<=n){aroudLiveCount+=board[x+1][y+1];}}if(y-1>=0){aroudLiveCount+=board[x][y-1];}if(y+1<=n){aroudLiveCount+=board[x][y+1];}if(temp==1){if(aroudLiveCount<2||aroudLiveCount>3){return 0;}return 1;}else{if(aroudLiveCount==3){return 1;}return 0;}}
}
33.(383. 赎金信)题目描述:
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
第一版(就是统计)
class Solution {public boolean canConstruct(String ransomNote, String magazine) {int[] letterNums=new int[26];for(char ch:magazine.toCharArray()){letterNums[ch-97]++;}for(char ch:ransomNote.toCharArray()){if(letterNums[ch-97]<=0){return false;}letterNums[ch-97]--;}return true;}
}
34.(205. 同构字符串) 题目描述:
给定两个字符串 s 和 t ,判断它们是否是同构的。
如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
第一版(这个题我之前做过,就是必须两个map a->b 然后 b->a 判断时候 就是从两个map里面拿出的也要对上)
class Solution {public boolean isIsomorphic(String s, String t) {int sLen=s.length();int tLen=t.length();if(sLen!=tLen){return false;}Map<Character,Character> s2tMap=new HashMap();Map<Character,Character> t2sMap=new HashMap();for(int i=0;i<sLen;i++){char sChar=s.charAt(i);char tChar=t.charAt(i);if(s2tMap.get(tChar)==null&&t2sMap.get(sChar)==null){s2tMap.put(tChar,sChar);t2sMap.put(sChar,tChar);}else if(s2tMap.get(tChar)==null||t2sMap.get(sChar)==null){return false;}else{if(!s2tMap.get(tChar).equals(sChar)||!t2sMap.get(sChar).equals(tChar)){return false;}}}return true;}
}
35.(290. 单词规律)题目描述:
给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。
第一版(和上面那个题一模一样,我是直接复制过了改了一下。。。,今天这些题都感觉不是很难。。)
class Solution {public boolean wordPattern(String pattern, String s) {String[] strs=s.split(" ");int sLen=strs.length;int pLen=pattern.length();if(sLen!=pLen){return false;}Map<Character,String> ptsMap=new HashMap();Map<String,Character> stpMap=new HashMap();for(int i=0;i<pLen;i++){char pChar=pattern.charAt(i);String str=strs[i];if(ptsMap.get(pChar)==null&&stpMap.get(str)==null){ptsMap.put(pChar,str);stpMap.put(str,pChar);}else if(ptsMap.get(pChar)==null||stpMap.get(str)==null){return false;}else{if(!ptsMap.get(pChar).equals(str)||!stpMap.get(str).equals(pChar)){return false;}} }return true;}
}
36.(242. 有效的字母异位词)题目描述:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
第一版(还是统计。。)
class Solution {public boolean isAnagram(String s, String t) {// 我感觉加了这个 最后就不需要再去遍历一遍 letterCount 了吧。。我看解题都是还遍历了一遍这个看是不是都为0if(s.length()!=t.length()){return false;}int[] letterCount=new int[26];for(char ch:s.toCharArray()){letterCount[ch-'a']++;}for(char ch:t.toCharArray()){if(letterCount[ch-'a']<=0){return false;}letterCount[ch-'a']--;}return true;}
}
37.(49. 字母异位词分组)题目描述:
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
第一版(由于上一个刚做完怎么判断于是我就把上个题判断方法复制过来,然后遍历就ok,但是最后超过了6%。。)
class Solution {public List<List<String>> groupAnagrams(String[] strs) {List<List<String>> res=new ArrayList();int len=strs.length;if(len==0){return res;}if(len==1){List<String> temp=new ArrayList();temp.add(strs[0]);res.add(temp);return res;}int[] flag=new int[len];for(int i=0;i<len;i++){if(flag[i]!=0){continue;}List<String> temp=new ArrayList();temp.add(strs[i]);for(int j=i+1;j<len;j++){if(isAnagram(strs[i],strs[j])){temp.add(strs[j]);flag[j]=1;}}res.add(temp);}return res;}public boolean isAnagram(String s, String t) {if(s.length()!=t.length()){return false;}int[] letterCount=new int[26];for(char ch:s.toCharArray()){letterCount[ch-'a']++;}for(char ch:t.toCharArray()){if(letterCount[ch-'a']<=0){return false;}letterCount[ch-'a']--;}return true;}}
第二版(看了解题,真的这个排序作为 key,太秀了!!!)
class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String,List<String>> map=new HashMap();for(String str:strs){char[] temp=str.toCharArray();Arrays.sort(temp);String key=new String(temp);List<String> list=map.getOrDefault(key,new ArrayList());list.add(str);map.put(key,list);}return new ArrayList<List<String>>(map.values());}
}
今天早点收工,手机瘾犯了,想刷视频。。。
加油,早日跳槽!!!
相关文章:
面试经典150题(32-37)
leetcode 150道题 计划花两个月时候刷完,今天(第十五天)完成了6道(32-37)150: 今天刚好有点没精神的感觉,然后碰到的题也不难。。天意!!! 32.(289. 生命游戏࿰…...
手撕分布式缓存---HTTP Client搭建
经过上个章节的学习,我们已经实现了一致性哈希算法,这个算法保证我们可以在节点发生变动时,最少的key请求受到影响,并返回这个节点的名称;这很大程度上避免了哈希雪崩和哈希穿透的问题。这个章节我们要基于此实现完整的…...
word如何快速制作简易代码块
先上解决方案。 方式一(全自动): typora编辑,导出选择word文档即可。内网环境,故放弃。 方式二(全手动): 在修改文档时,左侧会有“段落布局”按钮,点击该按…...
Linux常用网络指令
网络参数设定使用的指令 手动/自动设定与启动/关闭 IP 参数:ifconfig, ifup, ifdown ifconfig ifconfig常用于修改网络配置以及查看网络参数的指令 [rootwww ~]# ifconfig {interface} {up|down} < 观察与启动接口 [rootwww ~]# ifconfig interface {options…...
Spark on Yarn 安装配置实验(3.1.1)
子任务二: Spark on Yarn 安装配置 本任务需要使用 root 用户完成相关配置, 已安装 Hadoop 及需要配置前置环境,具体要求如下: 1 、从宿主机 /opt 目录下将文件 spark-3.1.1-bin-hadoop3.2.tgz 复制到容器 Master 中的 /opt/software (若 路径不存在,则需新…...
详解YOLOv5网络结构/数据集获取/环境搭建/训练/推理/验证/导出/部署
一、本文介绍 本文给大家带来的教程是利用YOLOv5训练自己的数据集,以及有关YOLOv5的网络结构讲解/数据集获取/环境搭建/训练/推理/验证/导出/部署相关的教程,同时通过示例的方式让大家来了解具体的操作流程,过程中还分享给大家一些好用的资源…...
ansible(不能交互)
1、定义 基于python开发的一个配置管理和应用部署工具,在自动化运维中异军突起,类似于xshell一键输入的工具,不需要每次都切换主机进行操作,只要有一台ansible的固定主机,就可以实现所有节点的操作。不需要agent客户端…...
黑马点评06分布式锁 2Redisson
实战篇-17.分布式锁-Redisson功能介绍_哔哩哔哩_bilibili 1.还存在的问题 直接实现很麻烦,借鉴已有的框架。 2.Redisson用法 3.Redisson可重入原理 在获取锁的时候,看看申请的线程和拿锁的线程是否一致,然后计算该线程获取锁的次数。一个方法…...
深度剖析知识图谱:方法、工具与实战案例
💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 知识图谱作为一种强大的知识表示和关联技术&am…...
Oracle中的dblink简介
Oracle中的dblink简介 是一种用于在不同数据库之间进行通信和数据传输的工具。它允许用户在一个数据库中访问另一个数据库中的对象,而无需在本地数据库中创建这些对象。 使用dblink,用户可以在一个数据库中执行SQL语句,然后访问另一个数据库中…...
ubuntu安装显卡驱动过程中遇到的错误,及解决办法!
ubuntu安装显卡驱动的过程中,可能会遇到以下问题,可以参考解决办法! 问题1: ERROR: An error occurred while performing the step: "Building kernel modules". See /var/log/nvidia-installer.log for details. …...
【程序】STM32 读取光栅_编码器_光栅传感器_7针OLED
文章目录 源代码工程编码器基础程序参考资料 源代码工程 源代码工程打开获取: http://dt2.8tupian.net/2/28880a55b6666.pg3这里做了四倍细分,在屏幕上显示 速度、路程、方向。 接线方法: 单片机--------------串口模块 单片机的5V-------…...
TestSSLServer4.exe工具使用方法简单介绍(查SSL的加密版本SSL3或是TLS1.2)
一、工具使用方法介绍 工具使用方法参照:http://www.bolet.org/TestSSLServer/ 全篇英文看不懂,翻译了下,能用到的简单介绍如下: 将下载的TestSSLServer4.exe工具放到桌面上,CMD命令行进入到桌面目录,执…...
新年跨年烟花超酷炫合集【内含十八个烟花酷炫效果源码】
❤️以下展示为全部烟花特效效果 ❤️下方仅展示部分代码 ❤️源码获取见文末 🎀HTML5烟花喷泉 <style> * {padding:0;margin:0; } html,body {positi...
计算机网络考研辨析(后续整理入笔记)
文章目录 体系结构物理层速率辨析交换方式辨析编码调制辨析 链路层链路层功能介质访问控制(MAC)信道划分控制之——CDMA随机访问控制轮询访问控制 扩展以太网交换机 网络层网络层功能IPv4协议IP地址IP数据报分析ICMP 网络拓扑与转发分析(重点…...
JMESPath语言
JMESPath(JSON Matching Expression Path) 一种查询语言。 主要用于从JSON文档中检索和过滤数据。 通过写表达式提取和处理JSON数据,而无需编写复杂的代码。 功能:数据提取、过滤、转换、排序。 场景:处理API响应…...
【C++高阶(七)】C++异常处理的方式
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:C从入门到精通⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你学习C 🔝🔝 异常处理的方式 1. 前言2. C语言处理异常的方式…...
在Idea中创建基于工件的本地服务
目录 1、创建基于工件的Tomcat服务器: 2、修改名称: 3、修改服务器项: 4、部署项 5、最后记得点右下角的【应用】和【确定】保存。 1、创建基于工件的Tomcat服务器: 运行->编辑配置->【Tomcat服务器】->本地 2、修…...
十六、YARN和MapReduce配置
1、部署前提 (1)配置前提 已经配置好Hadoop集群。 配置内容: (2)部署说明 (3)集群规划 2、修改配置文件 MapReduce (1)修改mapred-env.sh配置文件 export JAVA_HOM…...
自己动手写编译器:语法解析的基本原理
在前面系列章节中我们完成了词法解析。词法解析的基本任务就是判断给定字符串是否符合特定规则,如果符合那么就给这个字符串分配一个标签(token)。词法解析完成后接下来的工作就要分配给语法解析,后者的任务就是判断一系列标签的组合是否符合特定规范。 …...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
