【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值

本文主要是介绍【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。
更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~
👍感谢小伙伴们点赞、关注!

X的平方根

class Solution:

    def mySqrt(self, x: int) -> int:

        l, r, ans = 0, x, -1

        while l <= r:

            mid = (l + r) // 2

            if mid * mid <= x:

                ans = mid

                l = mid + 1

            else:

                r = mid - 1

        return ans

有效完全平方数

class Solution:

    def isPerfectSquare(self, num: int) -> bool:

        l = 0

        r = num

        while l <= r:

            mid = (l+r)//2

            if mid * mid == num:

                return True

            elif mid * mid < num:

                l = mid + 1

            else:

                r = mid - 1

        return False

搜索旋转排序数组

class Solution:

    def search(self, nums: List[int], target: int) -> int:

        if not nums:

            return -1

        # 二分法

        n = len(nums)

        left = 0

        right = n - 1

        while left <= right:

            mid = (left + right) // 2

            if nums[mid] == target:

                return mid

            if nums[0] <= nums[mid]:

                # 说明左边有序

                if nums[0] <= target < nums[mid]:

                    right = mid - 1

                else:

                    left = mid + 1

            else:

                # 右边有序

                if nums[mid] < target <= nums[n-1]:

                    left = mid + 1

                else:

                    right = mid - 1

        return -1

搜索二位矩阵

class Solution:

    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:

        if not matrix:

            return False

        # 二分查找 row = index // n ; col = index % n

        m = len(matrix)

        n = len(matrix[0])

        left = 0

        right = m * n - 1

        while left <= right:

            mid = (left + right) // 2

            cur_m = mid // n

            cur_n = mid % n

            if matrix[cur_m][cur_n] == target:

                return True

            elif matrix[cur_m][cur_n] > target:

                right = mid - 1

            else:

                left = mid + 1

        return False

搜索二维矩阵2

   def searchMatrix(self, matrix, target):

        """

        :type matrix: List[List[int]]

        :type target: int

        :rtype: bool

        """

        # 1.暴力法 for i in range(m) for j in range(n)   O(mn)

        # 2.剪枝搜索,假设从左下角开始搜索O(m+n)

        if not matrix:

            return False

        m = len(matrix)

        n = len(matrix[0])

        row = m - 1

        col = 0

        while row >= 0 and col < n:

            if matrix[row][col] > target:

                row -= 1

            elif matrix[row][col] < target:

                col += 1

            else:

                return True

        return False

寻找旋转排序数组中的最小值

class Solution:

    def findMin(self, nums: List[int]) -> int:

        if len(nums) == 1:

            return nums[0]

        left = 0

        right = len(nums) - 1

        while left < right:

            mid = (left + right) // 2

            if nums[mid] < nums[right]:

                # mid可能是最小值

                right = mid

            else:

                # mid一定不是最小值

                left = mid + 1

        return nums[left]

关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

觉得不错的小伙伴,感谢点赞、关注加收藏哦!

欢迎关注下方GZH:阿旭算法与机器学习,共同学习交流~

这篇关于【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/518578

相关文章

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

C# ComboBox下拉框实现搜索方式

《C#ComboBox下拉框实现搜索方式》文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教... 目录C# ComboBox下拉框实现搜索步骤一步骤二步骤三总结C# ComboBox下拉框实现搜索步骤一这

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第