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

rust学习笔记6-数组练习704. 二分查找

上次说到rust所有权看看它和其他语言比有什么优势,就以python为例


# Python3
def test():a = [1, 3, -4, 7, 9]print(a[4])b = a  # 所有权没有发生转移del b[4]print(a[4])  # 由于b做了删除,导致a再度访问报数组越界if __name__ == '__main__':test()

运行结果

再看rust

fn main() {let a = vec![1, 3, -4, 7, 9];println!("{}", a[4]);let mut b = a; // a is moved to b 所有权已发生转移b.pop();println!("{}", a[4]);  // 编译直接报错,无法运行}

rust通过所有权机制,让一个值或者一块内存只能有一个变量来控制的方式,一旦出现多个变量访问,编译直接报错,根本上杜绝了数组越界等内存错误。这点明显强于Python,Python要想解决此问题只能考虑使用深拷贝

import copy# Python3
def test():a = [1, 3, -4, 7, 9]print(a[4])b = copy.deepcopy(a)  # 使用深拷贝del b[4]print(a[4])  # 使用深拷贝a,b是两块不同内存不会受到影响if __name__ == '__main__':test()

vec动态数组, 如果学过Java,可以暂时把它当做ArrayList, 除了内存管理不一样,其他核心功能都一样。

下面练习一道算法题

704. 二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
 

提示:

你可以假设 nums 中的所有元素是不重复的。
n 将在 [1, 10000]之间。
nums 的每个元素都将在 [-9999, 9999]之间。


pub fn search(nums: Vec<i32>, target: i32) -> i32 {let mut left = 0;// len()函数返回值是usize类型,要转义为i32,不要直接使用let mut right = (nums.len() - 1) as i32;while left <= right {let middle = (left + right) / 2  ;if nums[middle as usize] > target {right = middle - 1;}else if nums[middle as usize] < target {left = middle + 1;}else {return  middle;}}return  -1;}
fn main() {let nums = vec![-1,0,3,5,9,12];println!("{}", search(nums, 9));
}

总结这道题是一道基础题,之前其他语言也做过,不难, 需要注意的一点nums.len()的返回值是usize类型需要先转换i32,然后在nums[middle as usize]在转换了,有人可能疑惑这不是多此一举,所有类型都是声明usize不就行了吗,答案是不行,因为提交leetcode会报数组越界问题。

相关文章:

rust学习笔记6-数组练习704. 二分查找

上次说到rust所有权看看它和其他语言比有什么优势&#xff0c;就以python为例 # Python3 def test():a [1, 3, -4, 7, 9]print(a[4])b a # 所有权没有发生转移del b[4]print(a[4]) # 由于b做了删除&#xff0c;导致a再度访问报数组越界if __name__ __main__:test() 运行结…...

Jsmoke-一款强大的js检测工具,浏览器部署即用,使用方便且高效

目录标题 Jsmoke &#x1f6ac;&#x1f6ac; by Yn8rt使用方式界面预览功能特性支持的敏感信息类型 Jsmoke &#x1f6ac;&#x1f6ac; by Yn8rt ​ 该插件由 Yn8rt师傅 开发&#xff0c;插件可以理解为主动版的hae和apifinder&#xff0c;因为其中的大多数规则我都引用了&a…...

PyCharm中通过命令行执行`pip`命令下载到哪里了:虚拟环境目录下

PyCharm中通过命令行执行pip命令下载到哪里了:虚拟环境目录下 在PyCharm中通过命令行执行pip命令安装工具包,包的下载位置取决于多种因素 虚拟环境 如果项目使用了虚拟环境(通常是推荐的做法): Windows:虚拟环境通常位于项目目录下的.venv文件夹(默认情况)或你指定…...

Spring Boot操作MaxComputer(保姆级教程)

目录 引言 一、引入依赖 二、配置文件 application.properties&#xff08;信息用自己的奥&#xff09; 三、实体类User.java 四、UserController 五、UserService 六、UserDao 七、UserDao.xml 八、postman 访问&#xff0c;成功查询数据 附件(修改和删除数据) 引言…...

Spring的构造注入

1.开发步骤2.构造方法的重载 2.1参数个数不同2.2构造参数个数相同时 3.注入总结 注入&#xff1a;通过Spring的配置文件&#xff0c;为成员变量赋值 Set注入&#xff1a;Spring调用Set方法&#xff0c;通过配置文件&#xff0c;为成员变量赋值 构造注入&#xff1a;Spring调用…...

服务器IPMI用户名、密码批量检查

背景 大规模服务器部署的时候&#xff0c;少不了较多的网管和监测平台&#xff0c;这些平台会去监控服务器的性能、硬件等指标参数&#xff0c;为了便于管理和控制&#xff0c;则需要给服务器IPMI带外管理添加较多的用户&#xff0c;这就需要对较多的服务器检查所对应的IPMI用…...

管理后台环境配置

后端配置及启动 a. 软件安装 1. Java sdk 1.8 2. maven 3.6 3. intellij IDEA 2024 4. Visual C Redistributable 5. mongodb 7.0 6. mysql 8.0 双击安装&#xff1a;mysql-installer-community-8.0.41.0.msi 版本选择&#xff1a;Full&#xff0c;包括服务器和客户端 …...

element-ui infiniteScroll 组件源码分享

简单分享 infiniteScroll 组件源码&#xff0c;主要有以下四个方面&#xff1a; 1、infiniteScroll 页面结构。 2、infiniteScroll 组件属性。 3、组件内部的方法。 4、存在的问题。 一、infiniteScroll 页面结构&#xff1a; 二、页面属性。 2.1 infinite-scroll-disab…...

Pany-v2:LFI漏洞探测与敏感文件(私钥窃取/其他)自动探测工具

地址:https://github.com/MartinxMax/pany 关于Pany-v2 Pany-v2 是一款 LFI&#xff08;本地文件包含&#xff09;漏洞探测工具&#xff0c;具备自动识别敏感文件的能力。它能够利用 LFI 漏洞检测并提取 id_rsa 私钥、系统密码文件以及其他可能导致安全风险的敏感信息。该工具…...

供应链管理系统--升鲜宝门店收银系统功能解析,登录、主界面、会员 UI 设计图(一)

供应链管理系统--升鲜宝门店收银系统功能解析&#xff0c;登录、主界面 会员 UI 设计图&#xff08;一&#xff09;...

Day11,Hot100(贪心算法)

贪心 &#xff08;1&#xff09;121. 买卖股票的最佳时机 第 i 天卖出的最大利润&#xff0c;即在前面最低价的时候买入 class Solution:def maxProfit(self, prices: List[int]) -> int:min_price prices[0]ans 0for price in prices:ans max(ans, price - min_price…...

nss刷题4

[SWPUCTF 2023 秋季新生赛]Pingpingping 看看源码&#xff0c;首先是get传参Ping_ip.exe,然后如果请求了_ping参数&#xff0c;就会执行ping命令&#xff0c;执行三次 <?php highlight_file(__FILE__); error_reporting(0); $_ping $_GET[Ping_ip.exe]; if(isset($_ping…...

Eclipse 编译项目指南

Eclipse 编译项目指南 引言 Eclipse 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;广泛用于Java、C/C、Python等多种编程语言的开发。在Eclipse中编译项目是进行软件开发的基础步骤。本文将详细介绍如何在Eclipse中编译项目&#xff0c;包括项目设置…...

天佐.乾坤袋 基于抽屉式文件存储的NoSql数据库

天佐.乾坤袋 天佐.乾坤袋 简介 天佐.乾坤袋 基于抽屉式文件存储的NoSql数据库&#xff0c;可用于文件打包&#xff0c;数据整合&#xff0c;加密存放等多种用途。可以方便快捷的搭建和部署存储应用的系统。 传说: 弥勒所有&#xff0c;专做储物之用。拥有不可思议之力&#x…...

win11编译pytorch cuda128版本流程

Geforce 50xx系显卡最低支持cuda128&#xff0c;torch cu128 release版本目前还没有释放&#xff0c;所以自己基于2.6.0源码自己编译wheel包。 1. 前置条件 1. 使用visual studio installer 安装visual studio 2022&#xff0c;工作负荷选择【使用c的桌面开发】,安装完成后将…...

Windows 11 下正确安装 Docker Desktop 到 D 盘的完整教程

文章目录 Windows 11 在 D 盘正确安装 Docker Desktop 的完整教程**前言****准备工作****1. 手动创建 Docker 相关目录**&#xff08;⚠️ **这一步非常重要**&#xff0c;否则会报错&#xff09;**2. 下载 Docker Desktop 安装程序****3. 使用管理员权限打开终端** **安装 Doc…...

IDEA - 查看类的继承结构(通过快捷键查看、通过生成类图查看)

一、通过快捷键查看 在项目中定位到目标类&#xff08;例如&#xff0c;Executor.java&#xff09; 按下快捷键 【Ctrl H】 此时会弹出 Type Hierarchy 窗口&#xff0c;展示所有相关的父类、子类、接口 二、通过生成类图查看 在项目中定位到目标类&#xff08;例如&#x…...

Vue 3指令全解析:内置指令与自定义指令实战指南

Vue指令是模板语法的核心武器&#xff0c;它们以v-前缀的形式为HTML元素添加特殊功能。本文将深入探讨Vue 3中的指令系统&#xff0c;覆盖10个核心指令的妙用&#xff0c;并手把手教你打造专属自定义指令。 一、Vue指令基础认知 指令本质上是DOM操作的语法糖&#xff0c;它们&…...

Springboot 自动化装配的原理

Springboot 自动化装配的原理 SpringBoot 主要作用为&#xff1a;起步依赖、自动装配。而为了实现这种功能&#xff0c;SpringBoot 底层主要使用了 SpringBootApplication 注解。 首先&#xff0c;SpringBootApplication 是一个复合注解&#xff0c;它结合了 Configuration、…...

Linux——进程池

前言&#xff1a;大佬写博客给别人看&#xff0c;菜鸟写博客给自己看&#xff0c;我是菜鸟。 1.实现思路 思路&#xff1a;通过创建匿名管道&#xff0c;来实现父子进程之间的通信 注1&#xff1a;父写&#xff0c;子读 注2&#xff1a;匿名管道只能用来进行具有血管关系的进程…...

Arm功能安全编译器6.6文档体系与认证要点解析

1. Arm Compiler for Functional Safety 6.6文档体系解析在功能安全软件开发领域&#xff0c;工具链的可靠性和文档完整性直接关系到最终产品的认证通过率。Arm Compiler for Functional Safety 6.6作为面向汽车电子、工业控制等安全关键领域的专用工具链&#xff0c;其文档体系…...

怎样轻松突破微信网页版限制:wechat-need-web开源插件实用指南

怎样轻松突破微信网页版限制&#xff1a;wechat-need-web开源插件实用指南 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 微信作为日常沟通的重要工具…...

范畴论与拓扑数据分析:统一聚类算法与捕捉数据形状的新范式

1. 项目概述&#xff1a;当聚类算法遇见范畴论与拓扑如果你在数据科学或机器学习领域摸爬滚打了一段时间&#xff0c;大概率对K-Means、DBSCAN、层次聚类这些名字已经烂熟于心。我们习惯于将它们视为一系列精妙的“算法黑箱”&#xff1a;输入数据点&#xff0c;调整几个超参数…...

LoRA微调实战2026:从零到生产的完整工程指南

为什么2026年LoRA仍然是最重要的微调方法 大模型微调技术日新月异&#xff0c;但LoRA&#xff08;Low-Rank Adaptation&#xff09;自2021年提出以来&#xff0c;不仅没有被淘汰&#xff0c;反而在2026年成为工业界微调的主流方法之一。原因很简单&#xff1a;极致的参数效率。…...

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan安装步骤详解

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan安装步骤详解。OpenClaw是开源的个人AI助手&#xff0c;Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&…...

Seurat分析避坑指南:从PBMC3K实战出发,详解`resolution`、`dims`参数怎么调,结果才靠谱

Seurat单细胞分析实战&#xff1a;如何科学调整resolution与dims参数获得理想分群第一次看到自己单细胞数据的UMAP图时&#xff0c;那种兴奋感至今难忘。但随之而来的困惑也同样深刻——为什么我的细胞分群看起来总是不太对&#xff1f;要么是密密麻麻挤在一起分不开&#xff0…...

DS4Windows终极指南:3步让PS4手柄在PC上完美工作

DS4Windows终极指南&#xff1a;3步让PS4手柄在PC上完美工作 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 想要在电脑上使用PS4手柄玩游戏&#xff0c;却总是遇到兼容性问题&#xff1f…...

本地化RAG系统构建:从原理到实践,赋能大型系统开发与运维

1. 项目概述&#xff1a;当RAG遇上大型系统开发在大型计算系统的开发与运维中&#xff0c;我们常常面临一个经典困境&#xff1a;系统日益复杂&#xff0c;文档堆积如山&#xff0c;但当你需要快速定位一个特定配置的来龙去脉&#xff0c;或是排查一个偶发的异常时&#xff0c;…...

范畴论视角下的概率机器学习:从Giry单子到贝叶斯推理的统一框架

1. 项目概述&#xff1a;当范畴论遇见概率机器学习如果你在机器学习领域摸爬滚打了一段时间&#xff0c;尤其是深度涉足过贝叶斯方法或概率图模型&#xff0c;你可能会对“不确定性”的数学表达感到既熟悉又头疼。我们习惯了用概率分布来描述数据噪声、参数先验和预测置信度&am…...

Bittensor:去中心化AI网络的架构、挑战与激励模型优化

1. 项目概述&#xff1a;当AI遇上去中心化&#xff0c;Bittensor在解决什么核心问题&#xff1f;最近几年&#xff0c;AI模型的能力突飞猛进&#xff0c;但一个越来越明显的趋势是&#xff0c;顶尖的AI能力正快速向少数几家科技巨头集中。无论是训练所需的算力、高质量的数据集…...