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

商城网站开发设计sem优化推广

商城网站开发设计,sem优化推广,wordpress+js插件开发教程,WordPress搭建社区网站提示:100道LeetCode热题-10-3主要是二分查找相关,包括三题:搜索插入位置、搜索二维矩阵、在排序数组中查找元素的第一个和最后一个位置。由于初学,所以我的代码部分仅供参考。 前言 才发现原题粘过来黑黑的,改了一下~…

提示:100道LeetCode热题-10-3主要是二分查找相关,包括三题:搜索插入位置、搜索二维矩阵、在排序数组中查找元素的第一个和最后一个位置。由于初学,所以我的代码部分仅供参考。


前言

才发现原题粘过来黑黑的,改了一下~

最近在学知识图谱,但还是不班门弄斧啦~Leetcode启动!

二分查找(Binary Search)是一种在有序数组中查找特定元素的搜索算法。事实上,在一些理论课上我们早就学会过它,它通过反复将数组分成两半来缩小搜索范围,从而快速找到目标元素。那么怎么运用呢?以下是二分查找的基本步骤:

  1. 确定数组的中间元素。

  2. 将目标值与中间元素进行比较。

  3. 如果目标值等于中间元素,则查找成功。

  4. 如果目标值小于中间元素,则在数组的左半部分继续查找。

  5. 如果目标值大于中间元素,则在数组的右半部分继续查找。

  6. 重复上述步骤,直到找到目标值或搜索范围为空。

二分查找的时间复杂度为 O(logn),其中 n 是数组的长度。这使得二分查找在处理大型数据集时非常高效。


提示:以下是本篇文章正文内容,下面结果代码仅供参考

题目1:搜索插入位置

1.题目要求:

题目如下:

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

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

示例 1:

输入: nums = [1,3,5,6], target = 5
输出: 2

示例 2:

输入: nums = [1,3,5,6], target = 2
输出: 1

示例 3:

输入: nums = [1,3,5,6], target = 7
输出: 4

提示:

  • 1 <= nums.length <= 10^{4}
  • -10^{4} <= nums[i] <= 10^{4}
  • nums 为 无重复元素 的 升序 排列数组
  • -10^{4} <= target <= 10^{4}

代码框架已经提供如下:

class Solution(object):

    def searchInsert(self, nums, target):

        """

        :type nums: List[int]

        :type target: int

        :rtype: int

        """

2.结果代码:

class Solution(object):def searchInsert(self, nums, target):""":type nums: List[int]:type target: int:rtype: int"""left, right = 0, len(nums) - 1while left <= right:mid = (left + right) // 2if nums[mid] == target:return midelif nums[mid] < target:left = mid + 1else:right = mid - 1return left

说明:

  • 初始化两个指针 leftright,分别指向数组的起始和结束位置。

  • 进入循环,当 left 小于等于 right 时:

    • 计算中间索引 mid

    • 如果 nums[mid] 等于目标值 target,直接返回 mid

    • 如果 nums[mid] 小于目标值 target,说明目标值在数组的右侧,将 left 移动到 mid + 1

    • 如果 nums[mid] 大于目标值 target,说明目标值在数组的左侧,将 right 移动到 mid - 1

  • 如果循环结束后仍未找到目标值,此时 left 指针指向的位置即为目标值应该插入的位置,直接返回 left

题目2:搜索二维矩阵

1.题目要求:

题目如下:

给你一个满足下述两条属性的 m x n 整数矩阵:

  • 每行中的整数从左到右按非严格递增顺序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。

示例 1:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

示例 2:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 100
  • -10^{4} <= matrix[i][j], target <= 10^{4}

代码框架已经提供如下:

class Solution(object):

    def searchMatrix(self, matrix, target):

        """

        :type matrix: List[List[int]]

        :type target: int

        :rtype: bool

        """

2.结果代码:

class Solution(object):def searchMatrix(self, matrix, target):""":type matrix: List[List[int]]:type target: int:rtype: bool"""if not matrix or not matrix[0]:return Falseleft, right = 0, len(matrix) * len(matrix[0]) - 1while left <= right:mid = (left + right) // 2mid_value = matrix[mid // len(matrix[0])][mid % len(matrix[0])]if mid_value == target:return Trueelif mid_value < target:left = mid + 1else:right = mid - 1return False

说明:

  • 首先判断矩阵是否为空,如果为空则直接返回 False

  • 初始化两个指针 leftright,分别指向矩阵的起始和结束位置。

  • 进入循环,当 left 小于等于 right 时:

    • 计算中间索引 mid

    • 根据 mid 计算出对应的矩阵中的行索引和列索引,得到中间值 mid_value

    • 如果 mid_value 等于目标值 target,直接返回 True

    • 如果 mid_value 小于目标值 target,说明目标值在矩阵的右侧,将 left 移动到 mid + 1

    • 如果 mid_value 大于目标值 target,说明目标值在矩阵的左侧,将 right 移动到 mid - 1

  • 如果循环结束后仍未找到目标值,返回 False

题目3:在排序数组中查找元素的第一个和最后一个位置

1.题目要求:

题目如下:

给你一个按照非递减顺序排列的整数数组 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]

提示:

  • 0 <= nums.length <= 10^{5}

  • -10^{9} <= nums[i] <= 10^{9}

  • nums 是一个非递减数组

  • -10^{9} <= target <= 10^{9}

代码框架已经提供如下:

class Solution(object):

    def searchRange(self, nums, target):

        """

        :type nums: List[int]

        :type target: int

        :rtype: List[int]

        """

2.结果代码:

class Solution(object):def searchRange(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[int]"""def binary_search_left(nums, target):left, right = 0, len(nums) - 1while left <= right:mid = (left + right) // 2if nums[mid] < target:left = mid + 1else:right = mid - 1return leftdef binary_search_right(nums, target):left, right = 0, len(nums) - 1while left <= right:mid = (left + right) // 2if nums[mid] <= target:left = mid + 1else:right = mid - 1return rightleft = binary_search_left(nums, target)if left == len(nums) or nums[left] != target:return [-1, -1]right = binary_search_right(nums, target)return [left, right]

说明:

  • 定义了两个辅助函数 binary_search_leftbinary_search_right,分别用于查找目标值的左边界和右边界。

  • binary_search_left 中,当 nums[mid] < target 时,将 left 移动到 mid + 1;否则,将 right 移动到 mid - 1。最终返回 left,即目标值的左边界。

  • binary_search_right 中,当 nums[mid] <= target 时,将 left 移动到 mid + 1;否则,将 right 移动到 mid - 1。最终返回 right,即目标值的右边界。

  • 调用 binary_search_left 查找目标值的左边界,如果目标值不存在于数组中,则返回 [-1, -1]

  • 如果目标值存在于数组中,调用 binary_search_right 查找目标值的右边界,并返回 [left, right]


总结

注意以上代码还有优化空间,大家可以自己动手尝试更优算法!

针对二分查找的三种题型进行了学习,了解了部分有关二分查找与python的相关知识,大家加油!

http://www.dtcms.com/wzjs/506675.html

相关文章:

  • 什么是网站实施哈尔滨关键词优化方式
  • 河北区做网站公司全网营销的公司
  • 网站建设一般怎么付款官网优化包括什么内容
  • 电子商务网站开发课程设计百度seo营销公司
  • 网站定制需求seo外链技巧
  • 免费营销网站制作搜索引擎国外
  • 涿鹿镇做网站企业站seo
  • 大连网页设计师招聘福州关键词排名优化
  • 毕业设计做系统网站好做营销策划的公司
  • 漳州网站开发营销推广方案设计
  • 工程信息网站排名抖音优化是什么意思
  • 上海电商网站建设公司百度推广电话号码
  • 迈肯奇迹做网站百度云app下载安装
  • 浙江电信关于网站备案信息核实的公告网络推广seo是什么
  • 申请免费网站建设十大收益最好的自媒体平台
  • 怎样使用仿站小工具做网站淘宝怎么提高关键词搜索排名
  • 政务公开和网站建设工作问题新闻头条今日最新消息
  • 网站建设高端培训如何在google上免费推广
  • windows搭建网站开发百度知道客服电话
  • 制作一个网站需要注意什么楼市最新消息
  • 广东平台网站建设seo优化检测
  • 网站开发运营东莞做网站seo
  • 网站建设作业有哪些制作网页链接
  • 国外web设计网站模板下载北京做百度推广的公司
  • wb网页设计素材模板网站网页制作app
  • 团购网站营销方案推广普通话的宣传内容
  • 企业网站建设找外包公司做营销型企业网站建设的内容
  • 莱芜网站建设哪里有地推放单平台
  • 网站可以做系统还原吗希爱力双效片副作用
  • 大良营销网站建设信息郑州粒米seo顾问