数组-二分查找-搜索插入位置/在排序数组中查找元素的第一个和最后一个位置/x 的平方根/有效的完全平方数

news/2024/4/19 3:23:15/文章来源:https://blog.csdn.net/sueong/article/details/129065565

二分查找

35搜索插入位置

https://leetcode.cn/problems/search-insert-position/submissions/

class Solution:def searchInsert(self, nums: List[int], target: int) -> int:l = 0r = len(nums)-1# // 整数除法 int /浮点数除法while(l<=r):mid = l + (r - l)//2if nums[mid] > target:r = mid - 1elif nums[mid]< target:l = mid + 1else:return mid# 因为l>r # 跳出循环 有可能插入在数组的末端 即此时下标 l=len(nums)-1 + 1(多插入的位置), r=l-1# 因此返回的是数组末端最后 """// 分别处理如下四种情况// 目标值在数组所有元素之前 [0,0)// 目标值等于数组中某一个元素 return middle// 目标值插入数组中的位置 [left, right) ,return right 即可// 目标值在数组所有元素之后的情况 [left, right),因为是右开区间,所以 return right"""return r + 1
// 第一种二分法
func searchInsert(nums []int, target int) int {l, r := 0, len(nums) - 1for l <= r{m := l + (r - l)/2if nums[m] == target{return m}else if nums[m] > target{r = m - 1}else{l = m + 1}}return r + 1
}

https://programmercarl.com/0035.%E6%90%9C%E7%B4%A2%E6%8F%92%E5%85%A5%E4%BD%8D%E7%BD%AE.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC

34在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]。

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

示例 1:

输入:nums = [5,7,7,8,8,10], target = 8 输出:[3,4]
示例 2:

输入:nums = [5,7,7,8,8,10], target = 6 输出:[-1,-1]
示例 3:

输入:nums = [], target = 0 输出:[-1,-1]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 
class Solution(object):def find_left(self,nums,target):l=0r=len(nums)-1while l<=r:mid=(l+r)//2# 如果找到了 继续找左边界 找第一个>=target 的值if nums[mid]==target:r=mid-1elif nums[mid]>target:r=mid-1else:l=mid+1# 因为l>r 此时跳出循环 r条件是mid-1 有可能是第一种nums[mid]==target的情况 # 所以看看l是不是符合(因为此时l=r+1 所以l有可能是mid )  if nums[l]== target:return l;else:return -1;def find_right(self,nums,target):l=0r=len(nums)-1while l<=r:mid=(l+r)//2# 如果找到了 继续找右边界 找最后一个<=target 的值if nums[mid]==target:l=mid+1elif nums[mid]>target:r=mid-1else:l=mid+1# 因为l>r 此时跳出循环 l条件是mid+1 有可能是第一种nums[mid]==target的情况 # 所以看看r是不是符合(因为此时l-1=r 所以r有可能是mid )  if nums[r]== target:return r;else:return -1;def searchRange(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[int]"""# 数组递增 最后一个数比target小 或者第一个数比targe大if len(nums)==0 or nums[0]>target or nums[-1]<target:return[-1,-1]ll=self.find_left(nums,target)rr=self.find_right(nums,target)return[ll,rr]

func find_left(nums []int, target int) int {l := 0r := len(nums) - 1for l <= r{mid := l + (r - l)/2 if nums[mid] > target{r =  mid -  1}else if nums[mid] ==  target{r = mid  - 1}else{l = mid + 1}}if nums[l] == target{return l}else{return -1}}
func find_right(nums []int, target int) int {l := 0r := len(nums) - 1for l <= r{mid := l + (r - l)/2 if nums[mid] > target{r =  mid -  1}else if nums[mid] == target{l = mid + 1}else{l = mid + 1}}if nums[r] == target{return r}else{return -1}}
func searchRange(nums []int, target int) []int {if len(nums) == 0||nums[0]>target||nums[len(nums)-1]<target{return []int{-1, -1}}else{ll:=find_left(nums,target)rr:=find_right(nums,target)return[]int{ll,rr}}
}

69.x 的平方根

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

示例 1:

输入:x = 4 输出:2
示例 2:

输入:x = 8 输出:2 解释:8 的算术平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/sqrtx
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:
在这里插入图片描述

class Solution:def mySqrt(self, x: int) -> int:l = 0r = xres = 0while l<=r:mid = l+(r-l)//2# 因为是取整,所以mid*mid不会更好等于x 所以会在这个过程中一直更新res,# 小于的情况,就是往右边找mid,扩大mid# =的情况,res就刚好是mid,找到了x的平方根if mid*mid <= x:res = midl = mid + 1else:r = mid -1return res
func mySqrt(x int) int {l:=0r:=xres:=0for l <= r{mid := l + (r - l)/2if mid * mid <= x{res = midl = mid + 1}else{r = mid - 1}}return res}

367.有效的完全平方数

给你一个正整数 num 。如果 num 是一个完全平方数,则返回 true ,否则返回 false 。

完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。

不能使用任何内置的库函数,如 sqrt 。

示例 1:

输入:num = 16 输出:true 解释:返回 true ,因为 4 * 4 = 16 且 4 是一个整数。
示例 2:

输入:num = 14 输出:false 解释:返回 false ,因为 3.742 * 3.742 = 14 但 3.742
不是一个整数。

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/valid-perfect-square
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution:def isPerfectSquare(self, num: int) -> bool:l = 0r = numres = 0while l<=r:mid = l+(r-l)//2# 因为是取整,所以mid*mid不会更好等于x 所以会在这个过程中一直更新res,# 小于的情况,就是往右边找mid,扩大mid# =的情况,res就刚好是mid,找到了x的平方根if mid*mid <= num:res = midl = mid + 1else:r = mid -1# 判断是不是整数相乘if res * res == num:return Trueelse:return False
func isPerfectSquare(num int) bool {l:=0r:=numres:=0for l <= r{mid := l + (r - l)/2if mid * mid <= num{res = midl = mid + 1}else{r = mid - 1}}if res * res == num{return true}else{return false}
}

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

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

相关文章

二叉树——找树左下角的值

找树左下角的值 链接 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 递归法 二叉树的 最底层 最左…

一维,二维差分の详解(简单易懂)

一,差分定义差分,就是前缀和的逆运算。二,具体过程1.一维差分例题构造差分数组首先给定一个原数组a&#xff1a;a[1], a[2], a[3],,,,,, a[n];然后我们构造一个数组b &#xff1a; b[1], b[2], b[3],,,,,, b[i];使得 a[i] b[1] b[2] b[3] ,,,,,, b[i]也就是说&#xff0c;…

Redis分布式锁实现及使用

文章目录分布式锁全局ID生成器一人一单实现超卖问题一人一单分布式锁Redis setnx实现分布式锁Redis在业内解决秒杀等业务场景有非常广的应用&#xff0c;如何设计实现一个分布式锁是解决超卖、一人一单问题非常重要… 分布式锁 分布式锁是控制分布式系统之间同步访问共享资源的…

CRM客户管理系统的作用和四大优势

CRM系统是一种以客户管理为核心&#xff0c;帮助营销、销售、服务部门实现业务自动化&#xff0c;为企业进行客户数据的收集、管理和分析&#xff0c;提高客户体验和留存&#xff0c;实现以客户为中心的管理模式的企业管理工具。那么&#xff0c;企业为什么要使用CRM系统&#…

Javaweb之mybits入门

2.1 Mybatis概述 2.1.1 Mybatis概念 MyBatis 是一款优秀的持久层框架&#xff0c;用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code&#xff0c;并且改名为MyBatis 。2013年11月迁移到Github …

XSS注入进阶练习篇(三) XSS原型链污染

XSS原型链污染1.原型链的概念1.1 构造函数的缺点1.2 prototype 属性的作用1.3 原型链1.4 constructor属性1.5 prototype和__proto__2. 原型链污染2.1 原型链污染是什么&#xff1f;2.2 原型链污染的条件2.3 原型连污染实例2.3.1 hackit 20182.3.2 challenge-04223.总结1.原型链…

新项目分析

1&#xff1a;数据类型处理 # sep‘\s‘ 这是正则表达式&#xff0c;通过一定规则的表达式来匹配字符串用的 \s 表示空白字符&#xff0c;包括但不限于空格、回车(\r)、换行(\n)、tab或者叫水平制表符(\t)等&#xff0c;这个根据编码格式不同代表的含义也不一样&#xff0c;感…

Codeforces Round #851 (Div. 2) A-E

题目链接&#xff1a;https://codeforces.com/contest/1788 A - One and Two 解题思路&#xff1a;将数组分成两半&#xff0c;两边二一样多就行了。 #include<bits/stdc.h> using namespace std; #define inf 0x3f3f3f3f #define lson l,mid,rt<<1 #define rso…

Kaggle系列之识别狗的品种类别(深度残差网络模型ResNet-34)

我们来到这个比赛页面&#xff1a;https://www.kaggle.com/competitions/dog-breed-identification这个数据集的目标是Determine the breed of a dog in an image(确定图像中狗的品种)我们先下载数据集解压之后来看下(当然不手动解压&#xff0c;也可以使用)&#xff0c;这里我…

记住这12个要点,你也能打造出让HR和技术主管前一亮的前端简历

第一篇章&#xff1a;吸引HR 如果你想在众多简历中脱颖而出&#xff0c;需要注意以下几点&#xff1a; 1、突出你的亮点&#xff1a; 给你的简历一个吸引人的文件命名和头部&#xff0c;突出你的关键技能和经验。 2、采用简洁的语言&#xff1a; 用简单易懂的语言来描述你的…

笔记本cpu温度多少正常?温度过高的4个常见原因

电脑CPU指的是中央处理器&#xff0c;它与电脑运行速度的快慢存在很大关系。如果电脑的处理器温度过高&#xff0c;就会影响我们电脑的运行速度&#xff0c;甚至出现蓝屏、卡顿的情况。 那么&#xff0c;对于电脑来说&#xff0c;笔记本cpu温度多少正常&#xff1f;有什么原因…

macOS Big Sur 11.7.4(20g1220)With OpenCore 0.8.9正式版 and winPE双引导分区原版镜像

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。镜像特点完全由黑果魏叔官方制作&#xff0c;针对各种机型进行默认配置&#xff0c;让黑苹果安装不再困难。系统镜像设置为双引导分区&#xff0c;全面去除clover引导分区&#xff08;如有需要&#xff0c;可以自行直接替换…

KT1025A蓝牙音频芯片_立讯KC认证FCC测试现场整改记录

目录 一、问题说明简介 测试机构立讯反馈&#xff0c;客户寄的样板进行无线KC【韩国】测试不过&#xff0c;体现在如下两点 蓝牙部分接收杂散不过 蓝牙的发射功率偏低 2.1 单独只给蓝牙部分供电的测试图片--OK 2.2 单独给整板供电--但是使用电池供电 2.3 单独给整板供电-…

关于机器人坐标系变换的笔记

ROS TFros中&#xff0c;可以通过TF Tree来进行获取 机器人不同坐标系之间的转换关系&#xff0c;命令如下&#xff1a;rosrun tf tf_echo base_link head_link1意思为&#xff0c;从源坐标系base_link&#xff0c;到目标坐标系head_link1的变换关系&#xff0c;结果如下所示。…

Crafting interpreters 中文翻译,持续修正

本书在线地址 http://craftinginterpreters.com/ 感谢作者 作者用近 4 年的时间持续创作和改进本书&#xff0c;并把其 Web 版本公开在网上。这本纸质书于今年 7 月出版&#xff0c;立刻在 Hacker News 等网络媒介上引起关注和讨论。 书中作者首先定义了一个动态类型的语言 …

棋牌类游戏测试用例怎么写?我敢打赌你绝对不知道

目录 一&#xff0e;登陆 二&#xff0e;大厅 三&#xff0e;小游戏 四&#xff0e;银行功能 五&#xff0e;其他按钮 总结感谢每一个认真阅读我文章的人&#xff01;&#xff01;&#xff01; 重点&#xff1a;配套学习资料和视频教学 一&#xff0e;登陆 1&#xff0e…

使用拦截器实现登录状态检测(以及在注册拦截器类时要使用ioc中的拦截器类)

拦截器 preHandler(HttpServletRequest request, HttpServletResponse response, Object handler) 方法在请求处理之前被调用。该方法在 Interceptor 类中最先执行&#xff0c;用来进行一些前置初始化操作或是对当前请求做预处理&#xff0c;也可以进行一些判断来决定请求是否…

【MyBatis】源码学习 04 - 从 MapperMethod 简单分析一条 SQL 的映射操作流程

文章目录前言参考目录学习笔记1、测试代码说明2、binding 包的主要功能3、获取 Mapper 接口实例过程4、SQL 语句执行流程4.1、方法调用器4.2、MapperMethod 绑定方法4.2.1、SqlCommand4.2.2、MethodSignature4.3、MapperMethod#execute前言 本文内容对应的是书本第 13 章的内容…

循环、函数、对象——js基础练习

目录 一、循环练习 1.1 取款机案例 1.2 九九乘法表 1.3 根据数据生成柱形图 1.4 冒泡排序 1.6综合大练习 二、函数 2.1 转换时间案例 三、对象 1. 遍历数组对象 2. 猜数字游戏 3. 生成随机颜色 4. 学成在线页面渲染案例 一、循环练习 1.1 取款机案例 // 准备一个…

电商项目之Feign与Dubbo技术选型

文章目录1 问题背景2 前言3 思路4 Feign与Dubbo的区别5 总结6 真实案例1 问题背景 电商项目&#xff0c;B端以consul作为注册中心。重构了一个营销服务&#xff0c;以Nacos作为注册中心。B端需要调用营销服务。关于远程调用框架&#xff0c;营销服务用了Dubbo&#xff0c;而B端…