代码随想录-数组篇

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

二分法

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/587535/

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

(0)

大家都在看

  • 算法竞赛进阶指南 0x69 二分图的覆盖与独立集

    最小点覆盖 在一个图中,求一个点的数目最少的一个点集,使得每一条边的两个端点中至少有一个属于这个集合。 由于任意图的最小点覆盖存在一些难度,所以这里只讨论二分图的最小点覆盖。 二分…

    数据结构和算法 2023年6月12日
    090
  • Trie 一轮复习

    字典树,顾名思义,就是一个像字典一样的树。—— OI-wiki 如图: Trie 用边代表字母,那么从根节点到某个节点的路径表示一个字符串。 Trie 支持的操作有三个: Trie…

    数据结构和算法 2023年6月12日
    096
  • 2.1 指令集结构的分类

    指令集结构不同的原因 Q:指令集结构都是相同的吗?如果不同,为什么不同? 不同的主要因素:CPU中用来存储操作数的存储单元的类型 为啥?那是因为CPU内部存储单元的 _类型_是不同…

    数据结构和算法 2023年6月7日
    0101
  • [UAC]C++判断某进程是否有管理员权限

    本文只发布于:https://www.cnblogs.com/Icys/p/IsAdminProcess.html BOOL IsAdminProcess(UINT PID) { …

    数据结构和算法 2023年6月7日
    096
  • External-Attention-tensorflow(更新中…)(整理各种注意力机制)

    🍀 Tensorflow implementation of various Attention Mechanisms, which is helpful to further u…

    数据结构和算法 2023年6月12日
    0132
  • Vector3.Slerp用于平滑转向

    第1种写法: Vector3.Slerp(v1, v2, percent) using UnityEngine; public class SmoothSetDirection :…

    数据结构和算法 2023年6月7日
    084
  • tarjan全家桶

    tarjan 全家桶 关于tarjan 它太强了 CCCOrz dfs树&low dfs树:在图上做不重复经过同一点的dfs,经过的边与点形成一棵树。于是图上所有点都被这棵…

    数据结构和算法 2023年6月7日
    091
  • 变量未初始化带来的教训

    c++里,局部变量会自动初始化为0; 但是全局变量会给个不确定的值。 8.3号做了个笔试题,一直A不出来,只能过50%多。 原因:用的核心代码模式,有一个类,里面实现个函数即可, …

    数据结构和算法 2023年6月8日
    082
  • 蓝桥杯-分果果

    小蓝要在自己的生日宴会上将 (n) 包糖果分给 (m) 个小朋友。每包糖果都要分出去,每个小朋友至少要分一包,也可以分多包。 小蓝已经提前将糖果准备好了,为了在宴会当天能把糖果分得…

    数据结构和算法 2023年6月12日
    088
  • C++ Protobuf

    Protobuf protobuf (protocol buffer) 是谷歌内部的混合语言数据标准。通过将结构化的数据进行序列化(串行化),用于通讯协议、数据存储等领域的语言无关…

    数据结构和算法 2023年6月8日
    078
  • 第四单元 语法分析

    第四单元 语法分析 4.1 自顶向下分析概述 自顶向下的分析(Top-Down Parsing) 从树的顶部(根节点)向底部(叶节点)方向构造分析树 最左推导(Left-most …

    数据结构和算法 2023年6月7日
    092
  • 数字三角形

    数字三角形 给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。(下面…

    数据结构和算法 2023年6月7日
    087
  • 【POJ 2387】Til the Cows Come Home(最短路径 Dijkstra算法)

    大奶牛很热爱加班,他和朋友在凌晨一点吃完海底捞后又一个人回公司加班,为了多加班他希望可以找最短的距离回到公司。深圳市里有N个(2 Sample Input 5 5 1 2 20 2…

    数据结构和算法 2023年6月14日
    083
  • 62(持续更新中)

    概念 生成树:对于一个无向连通图,边带有权,求具有全部n个定点,n-1条边的连通子图,这一个子图就是生成树。 最小生成树:在所有的子图中,边的权值之和最小的哪一个子图。 算法 Kr…

    数据结构和算法 2023年6月12日
    085
  • 树的直径

    树的直径 题目描述 树中两点间的不重复经过的边和点道路称为两点的路径,路径的长度(路径上所经边的长度和)称为两点的距离。圆的直径是一个圆的最长的一条弦,而树的直径是树中两点间最长的…

    数据结构和算法 2023年6月8日
    084
  • 算法:连续子数组的最大和

    问题: 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 解决 //1、动态规划 class Solution {…

    数据结构和算法 2023年6月12日
    077
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球