当前位置: 首页 > news >正文

面试经典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道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第十五天&#xff09;完成了6道(32-37)150&#xff1a; 今天刚好有点没精神的感觉&#xff0c;然后碰到的题也不难。。天意&#xff01;&#xff01;&#xff01; 32.&#xff08;289. 生命游戏&#xff0…...

手撕分布式缓存---HTTP Client搭建

经过上个章节的学习&#xff0c;我们已经实现了一致性哈希算法&#xff0c;这个算法保证我们可以在节点发生变动时&#xff0c;最少的key请求受到影响&#xff0c;并返回这个节点的名称&#xff1b;这很大程度上避免了哈希雪崩和哈希穿透的问题。这个章节我们要基于此实现完整的…...

word如何快速制作简易代码块

先上解决方案。 方式一&#xff08;全自动&#xff09;&#xff1a; typora编辑&#xff0c;导出选择word文档即可。内网环境&#xff0c;故放弃。 方式二&#xff08;全手动&#xff09;&#xff1a; 在修改文档时&#xff0c;左侧会有“段落布局”按钮&#xff0c;点击该按…...

Linux常用网络指令

网络参数设定使用的指令 手动/自动设定与启动/关闭 IP 参数&#xff1a;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训练自己的数据集&#xff0c;以及有关YOLOv5的网络结构讲解/数据集获取/环境搭建/训练/推理/验证/导出/部署相关的教程&#xff0c;同时通过示例的方式让大家来了解具体的操作流程&#xff0c;过程中还分享给大家一些好用的资源…...

ansible(不能交互)

1、定义 基于python开发的一个配置管理和应用部署工具&#xff0c;在自动化运维中异军突起&#xff0c;类似于xshell一键输入的工具&#xff0c;不需要每次都切换主机进行操作&#xff0c;只要有一台ansible的固定主机&#xff0c;就可以实现所有节点的操作。不需要agent客户端…...

黑马点评06分布式锁 2Redisson

实战篇-17.分布式锁-Redisson功能介绍_哔哩哔哩_bilibili 1.还存在的问题 直接实现很麻烦&#xff0c;借鉴已有的框架。 2.Redisson用法 3.Redisson可重入原理 在获取锁的时候&#xff0c;看看申请的线程和拿锁的线程是否一致&#xff0c;然后计算该线程获取锁的次数。一个方法…...

深度剖析知识图谱:方法、工具与实战案例

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 知识图谱作为一种强大的知识表示和关联技术&am…...

Oracle中的dblink简介

Oracle中的dblink简介 是一种用于在不同数据库之间进行通信和数据传输的工具。它允许用户在一个数据库中访问另一个数据库中的对象&#xff0c;而无需在本地数据库中创建这些对象。 使用dblink&#xff0c;用户可以在一个数据库中执行SQL语句&#xff0c;然后访问另一个数据库中…...

ubuntu安装显卡驱动过程中遇到的错误,及解决办法!

ubuntu安装显卡驱动的过程中&#xff0c;可能会遇到以下问题&#xff0c;可以参考解决办法&#xff01; 问题1&#xff1a; ​ ERROR: An error occurred while performing the step: "Building kernel modules". See /var/log/nvidia-installer.log for details. …...

【程序】STM32 读取光栅_编码器_光栅传感器_7针OLED

文章目录 源代码工程编码器基础程序参考资料 源代码工程 源代码工程打开获取&#xff1a; http://dt2.8tupian.net/2/28880a55b6666.pg3这里做了四倍细分&#xff0c;在屏幕上显示 速度、路程、方向。 接线方法&#xff1a; 单片机--------------串口模块 单片机的5V-------…...

TestSSLServer4.exe工具使用方法简单介绍(查SSL的加密版本SSL3或是TLS1.2)

一、工具使用方法介绍 工具使用方法参照&#xff1a;http://www.bolet.org/TestSSLServer/ 全篇英文看不懂&#xff0c;翻译了下&#xff0c;能用到的简单介绍如下&#xff1a; 将下载的TestSSLServer4.exe工具放到桌面上&#xff0c;CMD命令行进入到桌面目录&#xff0c;执…...

新年跨年烟花超酷炫合集【内含十八个烟花酷炫效果源码】

❤️以下展示为全部烟花特效效果 ❤️下方仅展示部分代码 ❤️源码获取见文末 🎀HTML5烟花喷泉 <style> * {padding:0;margin:0; } html,body {positi...

计算机网络考研辨析(后续整理入笔记)

文章目录 体系结构物理层速率辨析交换方式辨析编码调制辨析 链路层链路层功能介质访问控制&#xff08;MAC&#xff09;信道划分控制之——CDMA随机访问控制轮询访问控制 扩展以太网交换机 网络层网络层功能IPv4协议IP地址IP数据报分析ICMP 网络拓扑与转发分析&#xff08;重点…...

JMESPath语言

JMESPath&#xff08;JSON Matching Expression Path&#xff09; 一种查询语言。 主要用于从JSON文档中检索和过滤数据。 通过写表达式提取和处理JSON数据&#xff0c;而无需编写复杂的代码。 功能&#xff1a;数据提取、过滤、转换、排序。 场景&#xff1a;处理API响应…...

【C++高阶(七)】C++异常处理的方式

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 异常处理的方式 1. 前言2. C语言处理异常的方式…...

在Idea中创建基于工件的本地服务

目录 1、创建基于工件的Tomcat服务器&#xff1a; 2、修改名称&#xff1a; 3、修改服务器项&#xff1a; 4、部署项 5、最后记得点右下角的【应用】和【确定】保存。 1、创建基于工件的Tomcat服务器&#xff1a; 运行->编辑配置->【Tomcat服务器】->本地 2、修…...

十六、YARN和MapReduce配置

1、部署前提 &#xff08;1&#xff09;配置前提 已经配置好Hadoop集群。 配置内容&#xff1a; &#xff08;2&#xff09;部署说明 &#xff08;3&#xff09;集群规划 2、修改配置文件 MapReduce &#xff08;1&#xff09;修改mapred-env.sh配置文件 export JAVA_HOM…...

自己动手写编译器:语法解析的基本原理

在前面系列章节中我们完成了词法解析。词法解析的基本任务就是判断给定字符串是否符合特定规则&#xff0c;如果符合那么就给这个字符串分配一个标签(token)。词法解析完成后接下来的工作就要分配给语法解析&#xff0c;后者的任务就是判断一系列标签的组合是否符合特定规范。 …...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...