代码随想录-数组篇

上次刷没刷完整,和李哥做字节的题感觉先前刷的题白刷了,故打算从头到尾完整走一遍。

二分法

1-1.二分查找

力扣题目链接

给定一个 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]之间
class Solution:
    def search(self, nums: List[int], target: int) -> int:
        l,r = 0,len(nums)-1
        while l < r:
            mid = l + r + 1 >> 1
            if nums[mid] > target:
                r = mid - 1
            else:
                l = mid
        if nums[l] == target:
            return l
        return -1

RE了一次,原因是r的右侧初始化写成了len(nums)

1-2.搜索插入位置

力扣题目链接

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n)的算法。

示例 1:

&#x8F93;&#x5165;: nums = [1,3,5,6], target = 5
&#x8F93;&#x51FA;: 2

示例 2:

&#x8F93;&#x5165;: nums = [1,3,5,6], target = 2
&#x8F93;&#x51FA;: 1

示例 3:

&#x8F93;&#x5165;: nums = [1,3,5,6], target = 7
&#x8F93;&#x51FA;: 4

提示:

  • 1
class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        l,r = 0,len(nums)-1
        while l> 1
            if nums[mid] < target:
                l = mid
            else:
                r = mid - 1
        if nums[l] < target:
            return l + 1
        return l

一直WA,两个板子

第一个板子就是找第一个小于target值的位置,所以位置不能取到外面

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        l,r = 0,len(nums)
        while l> 1
            if nums[mid] >= target:
                r = mid
            else:
                l = mid + 1
        return l

这里和上面不一样,这里可以取到数组外面,我们找到的是第一个大于等于target的位置,所以可能取到len(nums)

总结:务必考虑清楚找到的是什么,然后敲定范围

1-3.在排序数组中查找元素的第一个和最后一个位置

力扣链接

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

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

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

示例 1:

&#x8F93;&#x5165;&#xFF1A;nums = [5,7,7,8,8,10], target = 8
&#x8F93;&#x51FA;&#xFF1A;[3,4]

示例 2:

&#x8F93;&#x5165;&#xFF1A;nums = [5,7,7,8,8,10], target = 6
&#x8F93;&#x51FA;&#xFF1A;[-1,-1]

示例 3:

&#x8F93;&#x5165;&#xFF1A;nums = [], target = 0
&#x8F93;&#x51FA;&#xFF1A;[-1,-1]

提示:

  • 0
class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        left,right = -1,-1
        if len(nums) == 0:
            return [-1,-1]
        l,r = 0,len(nums) - 1
        while l < r:
            mid = l + r >> 1
            if nums[mid] >= target:
                r = mid
            else:
                l = mid + 1
        if nums[l] == target:
            left = l
        l,r = 0,len(nums) - 1
        while l < r:
            mid = l + r + 1 >> 1
            if nums[mid]

一次AC了,但存在两个编写时的问题

一是一开始left和right搞反了,上面是>=,所以是第一个大于等于target的位置,所以是左侧。相反下面的为右侧。

二是 nums = [], target = 0 RE了,特判一下

1-4.x 的平方根

力扣链接

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

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

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

示例 1:

&#x8F93;&#x5165;&#xFF1A;x = 4
&#x8F93;&#x51FA;&#xFF1A;2

示例 2:

&#x8F93;&#x5165;&#xFF1A;x = 8
&#x8F93;&#x51FA;&#xFF1A;2
&#x89E3;&#x91CA;&#xFF1A;8 &#x7684;&#x7B97;&#x672F;&#x5E73;&#x65B9;&#x6839;&#x662F; 2.82842..., &#x7531;&#x4E8E;&#x8FD4;&#x56DE;&#x7C7B;&#x578B;&#x662F;&#x6574;&#x6570;&#xFF0C;&#x5C0F;&#x6570;&#x90E8;&#x5206;&#x5C06;&#x88AB;&#x820D;&#x53BB;&#x3002;

提示:

  • 0
class Solution:
    def mySqrt(self, x: int) -> int:
        if x == 0: return 0
        if x > 1
            if mid * mid > x:
                r = mid - 1
            else:
                l = mid
        return l

一次AC了,可能就是要考虑是大于x时才是不可能的完全不可能的情况,平方根乘起来必然

Original: https://www.cnblogs.com/ydssx7/p/16642223.html
Author: ydssx
Title: 代码随想录-数组篇

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612578/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • ubuntu下vscode安装go插件失败解决办法

    mac环境下设置GOSUMDB,可能会导致不会库到校验不通过 go env -w GOSUMDB=gosum.io+ce6e7565+AY5qEHUk/qmHc5btzW45JVo…

    数据库 2023年6月14日
    0107
  • form表单内容序列化的两种方法

    form表单内容序列化 form表单自带两种方法serialize()方法和serializeArray()方法 1.serialize()方法 &#x63CF;&…

    数据库 2023年6月14日
    083
  • SQL基础语法

    一:构建数据库和表的语法,字段数据类型 [En] One: syntax for building database and table, field data type 1:建库…

    数据库 2023年5月24日
    0124
  • [编程一生]历史文章分类汇总

    2021年过去了,总结一下我的239篇原创。方便大家利用自带的搜索功能当智能机器人来用。 面试类 方法论 架构类 网络通信与 操作系统原理 稳定性建设 Java 中间件 程序人生 …

    数据库 2023年6月6日
    094
  • Javaweb07-三层架构(BaseDao)

    1、BaseDao 持久层业务接口实现类的公共父类,定义了jdbc操作数据库的所有公共方法,方便子类继承; import java.io.InputStream; import j…

    数据库 2023年6月16日
    0102
  • Hibernate 学习笔记

    hibernate(持久化) Hibernate 是数据访问层(Dao层),就是把数据存入到数据库中,称为持久化。Hibernate 对 JDBC 进行了封装,针对数据访问层提出面…

    数据库 2023年6月11日
    073
  • 异常详解

    🦔异常 发现错误的理想时机是在编译阶段,也就是在运行程序之前。然而编译期间并不能找到所有的错误,余下的问题必须在运行期间解决。这就需要错误源能够通过某种方式,把适当的信息传递给某个…

    数据库 2023年6月14日
    092
  • MySQL知识点大全!!

    使用PreStatement对象: public int execUpdate(String sql, Object[] parms) { int count = 0; try {…

    数据库 2023年5月24日
    081
  • 【StoneDB研发日志】列式存储 delete方案调研

    MySQL删除数据的方式 以MySQL 5.7为例,数据库删除数据的方式一共有以下三种: delete truncate drop 三种方式都可以删除数据,但使用场景有所不同。 […

    数据库 2023年5月24日
    093
  • 软件测试基础理论

    软件基础的理论 一, 什么是软件产品 它是一个逻辑产品,没有实体,包括程序,文档和数据,需要通过终端设备才能体现出来功能和作用 二, 软件产品的中间过程文档 客户需求 &#…

    数据库 2023年6月16日
    092
  • NO.1 通讯录管理系统+源代码(C++)

    功能描述:显示简单的菜单,供用户选择操作 实现步骤:直接cout输出 功能描述:根据用户不同的操作代码选择,进入不同的功能,我们使用switch分支结构进行搭建 实现步骤:用whi…

    数据库 2023年6月14日
    076
  • 设计模式——单例模式

    引言 今天来谈谈设计模式中的单例模式,温故知新,以免生疏。 软件设计领域的四位世界级大师Gang Of Four (GoF):Erich Gamma,Richard Helm,Ra…

    数据库 2023年6月16日
    0101
  • JUC并发编程进阶!!

    1.知识点回顾及延伸 2.生产者消费者问题 3. 八锁问题 4.集合类线程不安全解决 5.Callable再理解 6.三大常用辅助类 6.1、 CountDownLatch 6.2…

    数据库 2023年6月16日
    092
  • 【黄啊码】MySQL复制以及调优

    一. 简介 MySQL自带复制方案,带来好处有: 数据备份。负载均衡。分布式数据。 概念介绍: 主机(master):被复制的数据库。从机(slave):复制主机数据的数据库。 复…

    数据库 2023年6月16日
    0113
  • 即时通讯课设Android端问题记录

    转眼间,就已经是大四学生,目前正在写毕设。Android 端没有系统的学习过,都是哪里不会查哪里,基本靠度娘。所以,在此记录下课设开发过程中,Android 端遇到的问题。 在主线…

    数据库 2023年6月9日
    057
  • 【转】MySQL合理使用索引

    索引可以说是数据库中的一个大心脏了,如果说一个数据库少了索引,那么数据库本身存在的意义就不大了,和普通的文件没什么两样。所以说一个好的索引对数据库系统尤其重要,今天来说说MySQL…

    数据库 2023年5月24日
    086
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球