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

【Leetcode 剑指Offer】第 4 天 查找算法(简单)

查找

  • 剑指 Offer 03. 数组中重复的数字
  • 剑指 Offer 53 - I. 在排序数组中查找数字 I
    • 二分法

题目链接

剑指 Offer 03. 数组中重复的数字

题:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1
的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

思路是先给数组排序,遍历过程中与后一个值相等说明有重复,直接输出即刻,但是使用len()一直报错,不知道原因

#报错!!Why
class Solution:def findRepeatNumber(self, nums: List[int]) -> int:nums=nums.sort()for i in range(0,len(nums)-1):if nums[i]==nums[i+1]:return nums[i]

换了一个方法不用遍历:

class Solution:def findRepeatNumber(self, nums: List[int]) -> int:tmp = [0]*len(nums)for i in nums:tmp[i]+=1if tmp[i]>1:return i

剑指 Offer 53 - I. 在排序数组中查找数字 I

题:统计一个数字在排序数组中出现的次数。
最暴力的方法时间复杂度O(n):

class Solution:def search(self, nums: List[int], target: int) -> int:#enumerate获取每个元素索引和值cont=0for index,v in enumerate(nums):if(v==target):cont=cont+1return cont

二分法

进化一下,要使用二分法,使用二分法分别找到 左边界 left和 右边界 right,两者之差就是target的数量了。

复杂度分析:
时间复杂度 O(logN) : 二分法为对数级别复杂度。
空间复杂度 O(1): 几个变量使用常数大小的额外空间。

在这里插入图片描述
来源题解

class Solution:def search(self, nums: [int], target: int) -> int:# 搜索右边界 righti, j = 0, len(nums) - 1while i <= j:m = (i + j) // 2if nums[m] <= target: i = m + 1else: j = m - 1right = i# 若数组中无 target ,则提前返回if j >= 0 and nums[j] != target: return 0# 搜索左边界 lefti = 0while i <= j:m = (i + j) // 2if nums[m] < target: i = m + 1else: j = m - 1left = jreturn right - left - 1作者:Krahets
链接:https://leetcode.cn/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof/solutions/155893/mian-shi-ti-53-i-zai-pai-xu-shu-zu-zhong-cha-zha-5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
http://www.lryc.cn/news/17735.html

相关文章:

  • Jenkins利用docker部署vue项目
  • 【Linux】如何将ntfs硬盘挂载到home目录下并具有读写权限
  • 拖拽删除元素、拖拽排序、拖拽预览图片和拖拽移动元素
  • yarn的global安装命令不生效
  • 如何发布自己的npm包?
  • 达梦数据库 闪回查询
  • java基础学习 day44(多态的优点和劣势)
  • Guna UI WinForms 2.0.4.4 Crack
  • 零售航母沃尔玛公布业绩:喜忧参半
  • Python学习笔记丨while、for、if循环结构基础知识与易错点
  • 【ROS学习笔记1】ROS快速体验输出Hello World
  • 复习git的使用
  • pip命令大全 含换源方法
  • 数据结构与算法之最短路路径与最短路径和动态规划
  • git 本地新建分支并进行合并
  • 2023年DAMA-CDGA/CDGP数据治理认证选择哪家机构好?
  • 浅析高速服务区交互一体机设备管理系统的建设与方向
  • 分布式面试题
  • Prophet 处理时间序列数据
  • 一文搞清楚LoRa网关,LoRa网关全知道
  • 医疗保健和智慧城市服务将引领5G物联网采用
  • promise静态方法及相关练习
  • 【Tips】通过背数据了解业务
  • 设备太分散?如何一站式管理边缘 OS、K8s 和应用?
  • CF1692D The Clock 题解
  • IDEA 30 个好用天花板技巧,敲代码直接接爽到飞。
  • 关于selenium的等待
  • 结构建模设计——Solidworks软件之装配体操作基本总结三(高级配合、机械配合、快捷菜单功能)
  • 【在 Colab 中使用 TensorBoard 绘图】
  • React循环DOM时为什么需要添加key