LeetCode 704, 290, 200
目录
- 704. 二分查找
- 题目链接
- 标签
- 思路
- 代码
- 290. 单词规律
- 题目链接
- 标签
- 思路
- 代码
- 200. 岛屿数量
- 题目链接
- 标签
- 思路
- 代码
704. 二分查找
题目链接
704. 二分查找
标签
数组 二分查找
思路
这道题是 二分查找 最经典的一道题,掌握了本题的思想就进入了 二分 思想的大门。
二分查找 指的是每次查找把区间分为两半,然后将目标值 target 与区间中点 mid 对应的值 nums[mid] 作比较,由于数组是 升序 的,所以如果 target 小于 nums[mid],则下一轮查找的区间为左子区间(因为只有在左子区间才能找到比 nums[mid] 小的数);如果 target 大于 nums[mid],则下一轮查找的区间为右子区间(因为只有在右子区间才能找到比 nums[mid] 大的数);如果 target 等于 nums[mid],则直接返回 mid 作为 target 的下标。当查找区间长度不够0时,退出查找,返回 -1 表示没有找到。
注意:二分查找 的前提是 数组有序,如果数组是无序的,那么将无法每次排除掉半个区间。
代码
class Solution {public int search(int[] nums, int target) {int left = 0, right = nums.length - 1; // left和right分别为查找区间的左、右索引while (left <= right) { // 当查找区间长度不够0时,退出查找int mid = left + (right - left >> 1); // 获取区间中间元素的索引if (target < nums[mid]) { // 如果 target 小于 nums[mid]right = mid - 1; // 将区间的 右端点 移动到 中点-1 处,下一轮查找的区间为左子区间} else if (target > nums[mid]) { // 如果 target 大于 nums[mid]left = mid + 1; // 将区间的 左端点 移动到 中点+1 处,下一轮查找的区间为右子区间} else { // 如果 target 等于 nums[mid]return mid; // 返回 mid 作为 target 的下标}}return -1; // 没有找到 target,返回 -1}
}
290. 单词规律
题目链接
290. 单词规律
标签
哈希表 字符串
思路
本题与 205. 同构字符串 很像,要么使用 建立双向索引 的方法,要么使用 查找第一次出现索引 的方法。上面那道题是用 字符与字符 之间的索引比较,而本题则是使用 字符与字符串 之间的索引比较。
建立双向索引 的方法是一种容易想到的方法,它的核心思想就是分别使用两个 Map,分别记录从 pattern中的字符 到 s中的字符串 的映射和从 s中的字符串 到 pattern中的字符 的映射,然后截取每个 字符 与 字符串,查看 字符 与 字符串 能否 互相映射,如果 字符 或 字符串 没有映射,则先建立映射。
相比之下,查找第一次出现索引 这种方法更难想到,因为它更偏向 底层,上面的方法使用 Map 存储了 每个字符对应的第一个字符串 或 每个字符串对应的第一个字符,其实不需要这么复杂,只需要存储 每个字符第一次出现的位置 和 每个字符串第一次出现的位置 即可,因为比较 字符 与 字符串 能否 互相映射 的更底层就是 比较 字符第一次出现的索引 与 字符串第一次出现的索引 是否一致。
思路明确了:先将字符串 s 用空格分割为 list;然后检查 pattern中字符的个数 与 list中字符串的个数 是否相等,如果这两个值不相等,那就说明 pattern 和 s 不遵循相同的规律,返回 false;接着获取 pattern 中每个字符第一次出现的索引 和 list 中每个字符串第一次出现的索引,如果它们不同,则说明 pattern 和 s 不遵循相同的规律,返回 false;如果能比较完全部 字符 与 字符串 都不返回 false,那么说明 pattern 和 s 遵循相同的规律,返回 true。
代码
class Solution {public boolean wordPattern(String pattern, String s) {List<String> list = List.of(s.split(" ")); // 用 空格 分割,将 pattern 分割到一个 List 集合中int n = pattern.length(); // 获取 s 的长度if (n != list.size()) { // 如果 pattern中字符的个数 与 list中字符串的个数 不相同return false; // 则 pattern 和 s 不遵循相同的规律,返回 false}for (int i = 0; i < n; i++) { // 遍历比较每个 字符 与 字符串int pi = pattern.indexOf(pattern.charAt(i); // 获取 本字符 第一次出现的索引int si = list.indexOf(list.get(i)); // 获取 本字符串 第一次出现的索引if (pi != si) { // 如果 字符第一次出现的索引 与 字符串第一次出现的索引 不同return false; // 则 pattern 和 s 不遵循相同的规律,返回 false}}return true; // pattern 和 s 遵循相同的规律,返回 true}
}
200. 岛屿数量
题目链接
200. 岛屿数量
标签
深度优先搜索 广度优先搜索 并查集 数组 矩阵
思路
本题的目标是 找到岛屿的个数,岛屿的定义是 一片连通的'1'。
题目可没有说不能修改原地图,所以可以遍历整个地图,如果找到陆地(该元素等于 '1'),就让岛屿数加一,并使用 深度优先搜索 淹没这块陆地所在的岛屿(将这片连通的 '1' 全部变成 '0'),之后接着遍历,直到遍历完整个地图。
代码
class Solution {public int numIslands(char[][] grid) {int res = 0;int m = grid.length, n = grid[0].length;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == '1') { // 如果i和j指向的是陆地res++; // 则岛屿数加一flood(grid, i, j); // 淹没这整座岛屿}}}return res;}// 在grid中,淹没 含有i和j指向陆地的 整座岛屿private void flood(char[][] grid, int i, int j) {grid[i][j] = '0'; // 先淹没i和j指向的陆地for (int k = 0; k < 4; k++) {int ki = i + dir[k][0], kj = j + dir[k][1];if (ki >= 0 && ki < grid.length && kj >= 0 && kj < grid[0].length // 如果ki和kj没有越界&& grid[ki][kj] == '1') { // 并且ki和kj指向的元素为'1',即ki和kj指向陆地flood(grid, ki, kj);; // 则淹没ki和kj指向的陆地}}}private int[][] dir = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; // 方向数组,分别为 向右、向下、向左、向上
}
相关文章:
LeetCode 704, 290, 200
目录 704. 二分查找题目链接标签思路代码 290. 单词规律题目链接标签思路代码 200. 岛屿数量题目链接标签思路代码 704. 二分查找 题目链接 704. 二分查找 标签 数组 二分查找 思路 这道题是 二分查找 最经典的一道题,掌握了本题的思想就进入了 二分 思想的大…...
如何利用Java进行大数据处理?
如何利用Java进行大数据处理? 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 引言 在当今信息爆炸的时代,处理大数据是许多应用程序和系统的核心需求之一。Java作为一种…...
【论文通读】GUICourse: From General Vision Language Model to Versatile GUI Agent
GUICourse: From General Vision Language Model to Versatile GUI Agent 前言AbstractMotivationSolutionGUICourseGUIEnvGUIEnv-globalGUIEnv-local GUIActGUIAct (web-single)GUIAct (web-multi)GUIAct (smartphone) GUIChat ExperimentsMain ResultAblation Study Conclusi…...
王道考研数据机构:中缀表达式转为后缀表达式
实现方法: 初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况: 遇到操作数。直接加入后缀表达式遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式&…...
PL/SQL安装+汉化教程
PL/SQL安装教程 一、安装: 登陆官网:PL/SQL Developer - Allround Automations下载 下载PL/SQL稳定版本12.0.7 根据自己计算机版本安装相适配的版本。我这里安装X64-bit版本 进行安装: 根据情况去更改安装,我这里全部下一步…...
Qt | Qt 线程相关类概述和举例
Qt 是一个广泛用于跨平台应用开发的框架。在 Qt 中,多线程支持是其核心特性之一,它允许开发者在不同平台上创建并发应用。以下是 Qt 中与线程相关的类概述及其使用示例。 Qt 中的线程相关类 QThread QThread 是 Qt 中用于创建和管理线程的基类。通过派生并重写 run() 函数…...
Linux 复现Docker NAT网络
Linux 复现Docker NAT网络 docker 网络的构成分为宿主机docker0网桥和为容器创建的veth 对构成。这个默认网络命名空间就是我们登陆后日常使用的命名空间 使用ifconfig命令查看到的就是默认网络命名空间,docker0就是网桥,容器会把docker0当成路由&…...
HBuilder X 小白日记03-用css制作简单的交互动画
:hover选择器,用于选择鼠标指针浮动在上面的元素。 :hover选择器可用于所有元素,不只是链接 :link选择器 设置指向未被访问页面的链接的样式 :visited选择器 用于设置指向已被访问的页面的链接 :active选择器 用于活动链接...
【深度学习练习】心脏病预测
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、什么是RNN RNN与传统神经网络最大的区别在于,每次都会将前一次的输出结果,带到下一隐藏层中一起训练。如下图所示: …...
创建react的脚手架
Create React App 中文文档 (bootcss.com) 网址:creat-react-app.bootcss.com 主流的脚手架:creat-react-app 创建脚手架的方法: 方法一(JS默认): 1. npx create-react-app my-app 2. cd my-app 3. …...
用例导图CMind
突然有一些觉悟,程序猿不能只会吭哧吭哧的低头做事,应该学会怎么去展示自己,怎么去宣传自己,怎么把自己想做的事表述清楚。 于是,这两天一直在整理自己的作品,也为接下来的找工作多做点准备。接下来…...
C++ 仿函数
一、介绍 CSTL中的仿函数,又被称为函数对象,其实就是:重载了()运算符的类。 因为在使用重载的operator()时,类似于函数调用,因此被称为仿函数。 ※注意※:仿函数本质上是一个类,不是函数。 二…...
Redhat 安装 docker 网络连接超时问题
目录 添加阿里云的Docker CE仓库 更新YUM缓存 安装 Docker Engine 启动并设置Docker自启动 验证 Docker 安装 [userlocalhost ~]$ sudo yum-config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo 正在更新 Subscription Management 软件仓库…...
Java面试题:undo log和redo log
undo log和redo log的区别 缓冲池(buffer pool): 主内存中的一个区域,可以缓存磁盘上经常被操作的数据,在执行crud时先操作缓冲池的数据以减少磁盘io 数据页(page): InnoDB存储引擎管理的最小单元,每页大小为16kb,页中存储的是行数据 redo log 重做日志,用来实现任务的持…...
【Scrapy】Scrapy 中间件等级设置规则
准我快乐地重饰演某段美丽故事主人 饰演你旧年共寻梦的恋人 再去做没流着情泪的伊人 假装再有从前演过的戏份 重饰演某段美丽故事主人 饰演你旧年共寻梦的恋人 你纵是未明白仍夜深一人 穿起你那无言毛衣当跟你接近 🎵 陈慧娴《傻女》 Scrapy 是…...
SDK环境的安装(测试使用)
1、安装 将文件解压至目录,我的目录为:D:\Program Files\Android 解压后如下: 下载链接如下: sdk下载 提取码见文章最后: 2、配置环境 1、在环境变量中,选择系统变量,点击新建。 变量名:ANDROID_HOME 变量值:“你自己的android-sdk安装路径” (例如我的:D:\Pro…...
【matlab】【python】爬虫实战
目录 引言 具体步骤 1.设置请求选项 2.发送请求并获取响应 3.设置正则表达式 4.执行正则表达式匹配 matlab完整代码 python代码示例 引言 在当今这个信息爆炸的时代,数据已成为推动社会进步和企业发展的核心动力之一。随着互联网的普及和技术的飞速发展&am…...
Android TV跨平台开发心得
这半年来陆陆续续做了一堆poc,刚开始是flutter,结果领导叫停了,说有其他部门做一样的事,真不巧;后来是react native,开发了个demo,上报上去了已经;现在又要做android nativewebview …...
View->裁剪框View的绘制,手势处理
XML文件 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android…...
语言模型的进化:从NLP到LLM的跨越之旅
在人工智能的浩瀚宇宙中,自然语言处理(NLP)一直是一个充满挑战和机遇的领域。随着技术的发展,我们见证了从传统规则到统计机器学习,再到深度学习和预训练模型的演进。如今,我们站在了大型语言模型ÿ…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
