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

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中字符串的个数 是否相等,如果这两个值不相等,那就说明 patterns 不遵循相同的规律,返回 false;接着获取 pattern 中每个字符第一次出现的索引 和 list 中每个字符串第一次出现的索引,如果它们不同,则说明 patterns 不遵循相同的规律,返回 false;如果能比较完全部 字符 与 字符串 都不返回 false,那么说明 patterns 遵循相同的规律,返回 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. 二分查找 标签 数组 二分查找 思路 这道题是 二分查找 最经典的一道题&#xff0c;掌握了本题的思想就进入了 二分 思想的大…...

如何利用Java进行大数据处理?

如何利用Java进行大数据处理&#xff1f; 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 引言 在当今信息爆炸的时代&#xff0c;处理大数据是许多应用程序和系统的核心需求之一。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…...

王道考研数据机构:中缀表达式转为后缀表达式

实现方法&#xff1a; 初始化一个栈&#xff0c;用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素&#xff0c;直到末尾。可能遇到三种情况: 遇到操作数。直接加入后缀表达式遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式&…...

PL/SQL安装+汉化教程

PL/SQL安装教程 一、安装&#xff1a; 登陆官网&#xff1a;PL/SQL Developer - Allround Automations下载 下载PL/SQL稳定版本12.0.7 根据自己计算机版本安装相适配的版本。我这里安装X64-bit版本 进行安装&#xff1a; 根据情况去更改安装&#xff0c;我这里全部下一步…...

Qt | Qt 线程相关类概述和举例

Qt 是一个广泛用于跨平台应用开发的框架。在 Qt 中,多线程支持是其核心特性之一,它允许开发者在不同平台上创建并发应用。以下是 Qt 中与线程相关的类概述及其使用示例。 Qt 中的线程相关类 QThread QThread 是 Qt 中用于创建和管理线程的基类。通过派生并重写 run() 函数…...

Linux 复现Docker NAT网络

Linux 复现Docker NAT网络 docker 网络的构成分为宿主机docker0网桥和为容器创建的veth 对构成。这个默认网络命名空间就是我们登陆后日常使用的命名空间 使用ifconfig命令查看到的就是默认网络命名空间&#xff0c;docker0就是网桥&#xff0c;容器会把docker0当成路由&…...

HBuilder X 小白日记03-用css制作简单的交互动画

:hover选择器&#xff0c;用于选择鼠标指针浮动在上面的元素。 :hover选择器可用于所有元素&#xff0c;不只是链接 :link选择器 设置指向未被访问页面的链接的样式 :visited选择器 用于设置指向已被访问的页面的链接 :active选择器 用于活动链接...

【深度学习练习】心脏病预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、什么是RNN RNN与传统神经网络最大的区别在于&#xff0c;每次都会将前一次的输出结果&#xff0c;带到下一隐藏层中一起训练。如下图所示&#xff1a; …...

创建react的脚手架

Create React App 中文文档 (bootcss.com) 网址&#xff1a;creat-react-app.bootcss.com 主流的脚手架&#xff1a;creat-react-app 创建脚手架的方法&#xff1a; 方法一&#xff08;JS默认&#xff09;&#xff1a; 1. npx create-react-app my-app 2. cd my-app 3. …...

用例导图CMind

突然有一些觉悟&#xff0c;程序猿不能只会吭哧吭哧的低头做事&#xff0c;应该学会怎么去展示自己&#xff0c;怎么去宣传自己&#xff0c;怎么把自己想做的事表述清楚。 于是&#xff0c;这两天一直在整理自己的作品&#xff0c;也为接下来的找工作多做点准备。接下来…...

C++ 仿函数

一、介绍 CSTL中的仿函数&#xff0c;又被称为函数对象&#xff0c;其实就是&#xff1a;重载了()运算符的类。 因为在使用重载的operator()时&#xff0c;类似于函数调用&#xff0c;因此被称为仿函数。 ※注意※&#xff1a;仿函数本质上是一个类&#xff0c;不是函数。 二…...

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 中间件等级设置规则

准我快乐地重饰演某段美丽故事主人 饰演你旧年共寻梦的恋人 再去做没流着情泪的伊人 假装再有从前演过的戏份 重饰演某段美丽故事主人 饰演你旧年共寻梦的恋人 你纵是未明白仍夜深一人 穿起你那无言毛衣当跟你接近 &#x1f3b5; 陈慧娴《傻女》 Scrapy 是…...

SDK环境的安装(测试使用)

1、安装 将文件解压至目录,我的目录为:D:\Program Files\Android 解压后如下: 下载链接如下: sdk下载 提取码见文章最后: 2、配置环境 1、在环境变量中,选择系统变量,点击新建。 变量名:ANDROID_HOME 变量值:“你自己的android-sdk安装路径” (例如我的:D:\Pro…...

【matlab】【python】爬虫实战

目录 引言 具体步骤 1.设置请求选项 2.发送请求并获取响应 3.设置正则表达式 4.执行正则表达式匹配 matlab完整代码 python代码示例 引言 在当今这个信息爆炸的时代&#xff0c;数据已成为推动社会进步和企业发展的核心动力之一。随着互联网的普及和技术的飞速发展&am…...

Android TV跨平台开发心得

这半年来陆陆续续做了一堆poc&#xff0c;刚开始是flutter&#xff0c;结果领导叫停了&#xff0c;说有其他部门做一样的事&#xff0c;真不巧&#xff1b;后来是react native&#xff0c;开发了个demo&#xff0c;上报上去了已经&#xff1b;现在又要做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的跨越之旅

在人工智能的浩瀚宇宙中&#xff0c;自然语言处理&#xff08;NLP&#xff09;一直是一个充满挑战和机遇的领域。随着技术的发展&#xff0c;我们见证了从传统规则到统计机器学习&#xff0c;再到深度学习和预训练模型的演进。如今&#xff0c;我们站在了大型语言模型&#xff…...

应急响应--网站(web)入侵篡改指南

免责声明:本文... 目录 被入侵常见现象: 首要任务&#xff1a; 分析思路&#xff1a; 演示案例: IIS&.NET-注入-基于时间配合日志分析 Apache&PHP-漏洞-基于漏洞配合日志分析 Tomcat&JSP-弱口令-基于后门配合日志分析 (推荐) Webshell 查杀-常规后门&…...

vue3+vue-router+vite 实现动态路由

文章中出现的代码是演示版本&#xff0c;仅供参考&#xff0c;实际的业务需求会更加复杂 什么是动态路由 什么场景会用到动态路由 举一个最常见的例子&#xff0c;比如说我们要开发一个后台管理系统&#xff0c;一般来说后台管理系统都会分角色登录&#xff0c;这个时候也就涉…...

Okhttp hostnameVerifier详解

hostnameVerifier 方法简介核心原理参考资料 方法简介 本篇博文以Okhttp 4.6.0来解析hostnameVerfier的作用&#xff0c;顾名思义&#xff0c;该方法的主要作用就是鉴定hostnname的合法性。Okhttp在初始化的时候我们可以自己配置hostnameVerfier&#xff1a; new OkHttpClien…...

TCP的p2p网络模式

TCP的p2p网络模式 1、tcp连接的状态有以下11种 CLOSED&#xff1a;关闭状态LISTEN&#xff1a;服务端状态&#xff0c;等待客户端发起连接请求SYN_SENT&#xff1a;客户端已发送同步连接请求&#xff0c;等待服务端相应SYN_RECEIVED&#xff1a;服务器收到客户端的SYN请请求&…...

力扣-贪心算法4

406.根据身高重建队列 406. 根据身高重建队列 题目 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或…...

动手学深度学习6.2 图像卷积-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;卷积层_哔哩哔哩_bilibili 代码_哔哩哔哩_bilibili 本节教材地址&#xff1a;6.2. 图像卷积 — 动…...

展开说说:Android服务之bindService解析

前面两篇文章我们分别总结了Android四种Service的基本使用以及源码层面总结一下startService的执行过程&#xff0c;本篇继续从源码层面总结bindService的执行过程。 本文依然按着是什么&#xff1f;有什么&#xff1f;怎么用&#xff1f;啥原理&#xff1f;的步骤来分析。 b…...

node-sass 老版本4.14.0 安装失败解决办法

旧项目 npm install 发现 node-sass 安装 失败 切换淘宝镜像之后 不能完全解决问题。因为需要编译&#xff0c;本地没有Python环境不能实现 安装node-sass时&#xff0c;在install阶段会从Github上下载一个叫binding.node的文件&#xff0c;而「GitHub Releases」里的文件…...

最近很火的字幕截图生成器

网址 https://disksing.com/fake-screenshot/ 最近很火的字幕截图生成器&#xff0c;对于自媒体来说真的太实用了 另外透露一下&#xff0c;你仔细研究就会发现&#xff0c;这是个纯前端的项目...

使用RabbitMQ实现可靠的消息传递机制

使用RabbitMQ实现可靠的消息传递机制 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. RabbitMQ简介 RabbitMQ是一个开源的消息代理软件&#xff0c;实现了高级消息队列协议&#xff08;AMQP&…...