代码随想录打卡第一天(补)

数组理论基础,704. 二分查找,27. 移除元素

704. 二分查找

最简单的二分思想的应用,主要锻炼写两种方法

两种方法的区别就是:右指针的每次变化,可能还有就是最后找到目标值后的一个下标到底是什么

二分思想:左右边界,固定一个边界,不断移动另一个边界,直到最后边界重叠,也就找到了这个目标值

移动边界的条件是:比较区间的中间值和目标值的大小

class Solution {public int search(int[] nums, int target) {//左闭右闭int lt = 0, rt = nums.length-1;int mid;while(lt <= rt){mid = lt + ( rt - lt ) / 2;if( nums[mid] == target) return mid;else if( nums[mid] < target ){lt = mid + 1;}else{rt = mid - 1;}}return -1;}
}
class Solution {public int search(int[] nums, int target) {//左闭右开int lt = 0, rt = nums.length;int mid;while(lt < rt){mid = lt + ( rt - lt ) / 2;if( nums[mid] == target) return mid;else if( nums[mid] < target ){lt = mid + 1;}else{rt = mid;}}return -1;}
}

题目建议: 大家能把 704 掌握就可以,35.搜索插入位置 和 34. 在排序数组中查找元素的第一个和最后一个位置 ,如果有时间就去看一下,没时间可以先不看,二刷的时候在看。

先把 704写熟练,要熟悉 根据 左闭右开,左闭右闭 两种区间规则 写出来的二分法

题目链接:. - 力扣(LeetCode)

文章讲解:代码随想录

视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili

附一下另外两题 35 34

35. 搜索插入位置 - 力扣(LeetCode)

这个题目其实就是需要多考虑一下,两种方法最后返回的插入下标的区别

就是返回左指针,因为闭合的话一定是右指针在左指针的左边,结束循环没找到,不闭合就是右指针等于左指针,结束循环没找到,所以一定是左指针是插入的下标

class Solution {public int searchInsert(int[] nums, int target) {//左闭右闭int lt = 0, rt = nums.length-1;int mid;while ( lt <= rt ) {mid = lt + ( rt - lt ) / 2;if( nums[mid] == target ) return mid;else if ( nums[mid] > target ) {rt = mid - 1;} else {lt = mid + 1;}}return lt;}
}
class Solution {public int searchInsert(int[] nums, int target) {//左闭右开int lt = 0, rt = nums.length;int mid;while ( lt < rt ) {mid = lt + ( rt - lt ) / 2;if( nums[mid] == target ) return mid;else if ( nums[mid] > target ) {rt = mid;} else {lt = mid + 1;}}return lt;}
}

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

这个题目就是比之前的多的是,需要找到两个下标,可以分解为找到开始位置的下标和结束位置的下标,使用两次二分查找,然后问题就是:因为是非递减,存在平台,怎么能找到是个问题;首先来看,我们需要明确的是我们始终需要将左右边界框住我们的目标值,所以判断如何移动左右边界的条件就是,看mid和目标值的位置对比,进行分情况讨论。一般分为小于,等于,大于。

class Solution {public int[] searchRange(int[] nums, int target) {if(nums.length == 0) return new int[]{-1,-1};//左闭右闭,这是需要很多边界条件的int left, right;int lt = 0, rt = nums.length-1;int mid;while (lt <= rt) {mid = lt + (rt - lt) / 2;if (nums[mid] >= target) {rt = mid - 1 ;}else {lt = mid + 1;}}//  System.out.println(lt);if(lt >= 0 && lt < nums.length) left = target == nums[lt] ? lt : -1;else return new int[]{-1,-1};if(left == -1) return new int[]{-1,-1};lt = 0;rt = nums.length-1;//  int mid;while (lt <= rt) {mid  = lt + (rt - lt) / 2;if(nums[mid] <= target) {lt = mid + 1;}else{rt = mid - 1;}}if(rt < 0 && rt > nums.length) return new int[]{-1,-1};right = rt;return new int[]{left, right};}
}
class Solution {public int[] searchRange(int[] nums, int target) {if(nums.length == 0) return new int[]{-1,-1};//左闭右闭int left = -2, right = -2;int lt = 0, rt = nums.length-1;int mid;while (lt <= rt) {mid = lt + (rt - lt) / 2;if (nums[mid] >= target) {rt = mid - 1 ;left = rt + 1;}else {lt = mid + 1;}}lt = 0;rt = nums.length-1;//  int mid;while (lt <= rt) {mid  = lt + (rt - lt) / 2;if(nums[mid] <= target) {lt = mid + 1;right = lt -1 ;}else{rt = mid - 1;}}System.out.println(left);System.out.println(right);//左边界和右边界没有变化的话,就是没有找到//左边界和有边界的间距如果大于0,则是找到if ( left == -2 || right == -2 || right - left < 0){return new int[]{-1, -1};}return new int[]{left, right};}
}

27. 移除元素

题目建议: 暴力的解法,可以锻炼一下我们的代码实现能力,建议先把暴力写法写一遍。 双指针法 是本题的精髓,今日需要掌握,至于拓展题目可以先不看。

题目链接:. - 力扣(LeetCode)

文章讲解:代码随想录

视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/25866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python实现Stack

你好&#xff0c;我是悦创。 Python 中的栈结构是一种后进先出&#xff08;LIFO, Last In, First Out&#xff09;的数据结构&#xff0c;这意味着最后添加到栈中的元素将是第一个被移除的。栈通常用于解决涉及到反转、历史记录和撤销操作等问题。在 Python 中&#xff0c;你可…

九、C语言:隐式类型转换(整型提升与算数转换)

一、隐式类型转换 C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度&#xff0c;表达式中的字符和短整型操作数在使用之前被转换为普通整型&#xff0c;这种转换称为整型提升。 二、整型提升 //1.表达式的整型运算要在CPU的相应运算器件内执行&#xff…

I/O 设备与设备控制器

目录 I/O 设备 1. 键盘和鼠标 2. 显示器 3. 磁盘 4. 打印机 5. 网络适配器 设备控制器 1. 数据传输 2. 缓冲管理 3. 中断处理 4. 设备初始化 5. 错误检测与恢复 6. 设备控制器的组成部分 7. 示例图解 内存映像 I/O 原理 优点 实现方式 应用场景 I/O 通道 I…

Nginx 精解:正则表达式、location 匹配与 rewrite 重写

一、常见的 Nginx 正则表达式 在 Nginx 配置中&#xff0c;正则表达式用于匹配和重写 URL 请求。以下是一些常见的 Nginx 正则表达式示例&#xff1a; 当涉及正则表达式时&#xff0c;理解各个特殊字符的含义是非常重要的。以下是每个特殊字符的例子&#xff1a; ^&#xff1…

langchainJS -结构化输出(StructuredOutputParser )

在LangChain的帮助下&#xff0c;我们可以为输出定义模式。StructuredOutputParser 使用定义的名称和描述来分析和构建模型预测的输出。 const productParser StructuredOutputParser.fromNamesAndDescriptions({Name: "Name of The Product",Description: "De…

JS中split的用法

在JavaScript中&#xff0c;split() 方法用于将字符串分割成字符串数组&#xff0c;并返回这个数组。该方法接受一个参数&#xff0c;该参数定义了用于分割字符串的字符或正则表达式。 以下是一些使用 split() 方法的示例&#xff1a; 示例 1&#xff1a;使用字符串作为分隔符…

【笔记2】Python编程:从入门到实践(第2版) - 埃里克·马瑟斯

第二部分 1、外星人入侵 Pygame包 2、数据可视化 Matplotlib 、Plotly 3、Web应用程序 Django 项目1&#xff1a;外星人入侵 第12章&#xff5e;第14章 使用Pygame包来开发一款2D游戏。 它在玩家每消灭一群向下移动的外星人后&#xff0c;将玩家提高一个等级。等级越高&…

spring 事务隔离级别

一、理解 脏读、不可重复读和幻读 脏读、不可重复读和幻读是数据库事务处理中可能出现的三种并发问题&#xff0c;它们都与事务的隔离性有关。下面是这三种现象的简要说明&#xff1a; 1. 脏读&#xff08;Dirty Read&#xff09;: 当一个事务读取了另一个事务尚未提交的更改…

【Python】pandas中的read_excel()和to_excel()函数解析与代码实现

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

类和对象的学习总结(一)

面向对象和面向过程编程初步认识 C语言是面向过程的&#xff0c;关注过程&#xff08;分析求解问题的步骤&#xff09; 例如&#xff1a;外卖&#xff0c;关注点菜&#xff0c;接单&#xff0c;送单等 C是面向对象的&#xff0c;关注对象&#xff0c;把一件事拆分成不同的对象&…

java之面向对象2笔记

1 接口(interface) 1.1 概述 接口&#xff08;Interface&#xff09;在计算机科学中&#xff0c;特别是在面向对象编程&#xff08;OOP&#xff09;中&#xff0c;是一个重要的概念。它定义了一组方法的规范&#xff0c;但没有实现这些方法的具体代码。接口的主要目的是确保类…

[240610] 5 种 Non-Posix Shell 在 x-cmd 上的支持 | Perl 发布 5.40.0

目录 [TOC](目录)5 种非 Posix SHell - nushell,fish,xonsh,csh,pwshnushellfishxonshcshpwsh Perl 发布 5.40.0核心增强安全性不兼容的变化弃用性能提升模块和编译指示文档诊断配置和编译平台支持内部变化选定的错误修复已知问题先前版本的勘误表致谢报告错误致谢另请参阅 5 种…

SOA的设计模式_3.微服务模式

SOA的架构中&#xff0c;复杂的ESB企业服务总线依然处于非常重要的位置&#xff0c;整个系统的架构并没有实现完全的组件化以及面向服务&#xff0c;它的学习和使用门槛依然偏高。而微服务不再强调传统SOA架构里面比较重的ESB企业服务总线&#xff0c;同时SOA的思想进入到单个业…

Linux系统下 安装 Nginx

一、下载Nginx安装包 压缩包下载地址&#xff1a;nginx: download 服务器有外网&#xff0c;可直接使用命令下载 wget -c https://nginx.org/download/nginx-1.24.0.tar.gz 二、安装Nginx 1、解压 tar -zxvf nginx-1.24.0.tar.gz 2、安装Nginx所需依赖 yum install -y gc…

整数反转(leetcode)

题目&#xff1a; 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c;就返回 0。 假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。 示例 1&…

SLAM小题目

1、最小二乘题目&#xff1a; 假设有三个WIFI热点&#xff0c;位置分别在(x1,y1), (x2,y2), (x3,y3), 移动端测量到每一个热点的距离L1,L2和L3&#xff0c;要求解移动端的位置. #include <iostream> #include <vector> #include <cmath> class Point { pub…

监听DB配置变更之go-broadcast简单实现

文章目录 1. 前言2. 分析3. 实现4. 问题5. 小结6. 参考 1. 前言 之前遇到一个需求&#xff0c;因为配置的查找是基于db的&#xff0c;而db的更改却无法实时通知到具体利用到这条数据的使用方&#xff0c;为了实现db数据变动时&#xff0c;能够尽快让使用方知道这条数据发生了变…

设计模式七大原则-单一职责原则SingleResponsibility

七大原则是在设计“设计模式”的时候需要用到的原则&#xff0c;它们的存在是为了保证设计模式达到以下几种目的&#xff1a; 1.代码重用性 2.可读性 3.可拓展性 4.可靠性&#xff08;增加新的功能后&#xff0c;对原来的功能没有影响&#xff09; 5.使程序呈现高内聚、低耦合的…

3、线性代数

1、矩阵转置 A[i,j]A[j,i] 2、对称矩阵 &#xff1a;A转置A [0,2,3] [2 1 5] [3,5,1] 3、三维矩阵 求和 axis0 两个矩阵相加 axis1 两个向量相加 &#xff0c;axis2 向量内部相加 keepdimsTrue 求和后维度保持不变 4、cumsum累加求和 5、torch.mm() 或 torch.bmm() 【矩…

vivado HW_SERVER

HW_服务器 描述 硬件服务器管理到硬件目标的连接&#xff0c;例如硬件 板&#xff0c;包含一个或多个Xilinx FPGA设备的JTAG链&#xff0c;用于 编程和调试您的FPGA设计。 使用open_hw命令打开硬件管理器时&#xff0c;可以连接到 硬件服务器&#xff0c;本地或远程&#xff0c…