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

LeetCode Hot100 刷题笔记(9)—— 二分查找、技巧

目录

前言

一、二分查找

1. 搜索插入位置

2. 搜索二维矩阵

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

4. 搜索旋转排序数组

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

6. 寻找两个正序数组的中位数

二、技巧

1. 只出现一次的数字

2. 多数元素

3. 颜色分类

4. 下一个排列

5. 寻找重复数


前言

一、二分查找:搜索插入位置,搜索二维矩阵,在排序数组中查找元素的第一个和最后一个位置,搜索旋转排序数组,寻找旋转排序数组中的最小值,寻找两个正序数组的中位数。

二、技巧:只出现一次的数字,多数元素,颜色分类,下一个排列,寻找重复数。


一、二分查找

1. 搜索插入位置

原题链接:35. 搜索插入位置 - 力扣(LeetCode)

# 解法(1)
class Solution(object):
    def searchInsert(self, nums, target):
        if target in nums:
            return nums.index(target)
        else:
            nums.insert(0, float('-inf'))
            nums.insert(len(nums), float('inf'))
            for i, n in enumerate(nums):
                if nums[i] < target and nums[i+1] > target:
                    return i

# 解法(2)
class Solution(object):
    def searchInsert(self, nums, target):
        for k,v in enumerate(nums):
            if target<=max(nums):
                if v<target:
                    continue
                return k
            else:
                return len(nums)
2. 搜索二维矩阵

原题链接:74. 搜索二维矩阵 - 力扣(LeetCode)

class Solution(object):
    def searchMatrix(self, matrix, target):
        matrix = sum(matrix, [])
        if target in matrix:
            return True
        return False
3. 在排序数组中查找元素的第一个和最后一个位置

原题链接:34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

# 解法(1)
class Solution(object):
    def searchRange(self, nums, target):
        if target not in nums:
            return [-1, -1]
        else:
            left = nums.index(target)
            nums.sort(reverse=True)
            right = len(nums)- nums.index(target) - 1 
            return [left, right]

# 解法(2)
class Solution(object):
    def searchRange(self, nums, target):
        lst = []
        for k,v in enumerate(nums):
            if v==target:
                lst.append(k)
        if not lst:
            lst = [-1,-1]
        return [min(lst), max(lst)]
4. 搜索旋转排序数组

原题链接:33. 搜索旋转排序数组 - 力扣(LeetCode)

class Solution(object):
    def search(self, nums, target):
        if target in nums:
            return nums.index(target)
        else:
            return -1
5. 寻找旋转排序数组中的最小值

原题链接:153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode)

class Solution(object):
    def findMin(self, nums):
        return min(nums)
6. 寻找两个正序数组的中位数

原题链接:4. 寻找两个正序数组的中位数 - 力扣(LeetCode)

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        num = nums1 + nums2
        num.sort()
        ln = len(num) 
        if ln % 2 == 0:
            mid = (num[ln//2-1] + num[ln//2]) / 2.0
        else:
            mid = num[ln//2]
        return mid

二、技巧

1. 只出现一次的数字

原题链接:136. 只出现一次的数字 - 力扣(LeetCode)

# 解法(1)
class Solution(object):
    def singleNumber(self, nums):
        return sum(set(nums))*2 - sum(nums)

# 解法(2)
class Solution(object):
    def singleNumber(self, nums):
        from collections import Counter
        cnt = Counter(nums)
        for k, v in cnt.items():
            if v == 1:
                return k
2. 多数元素

原题链接:169. 多数元素 - 力扣(LeetCode)

# 解法(1)
class Solution(object):
    def majorityElement(self, nums):
        nums.sort()
        return nums[len(nums)//2]

# 解法(2)
class Solution(object):
    def majorityElement(self, nums):
        from collections import Counter
        cnt = Counter(nums)
        for k, v in cnt.most_common(1):
            return k
3. 颜色分类

原题链接:75. 颜色分类 - 力扣(LeetCode)

class Solution(object):
    def sortColors(self, nums):
        return nums.sort()   
4. 下一个排列

原题链接:

5. 寻找重复数

原题链接:287. 寻找重复数 - 力扣(LeetCode)

# 解法(1)
class Solution:
    def findDuplicate(self, nums: List[int]) -> int:
        from statistics import mode
        return mode(nums)

# 解法(2)
class Solution(object):
    def findDuplicate(self, nums):
        from collections import Counter
        cnt = Counter(nums)
        for k, v in cnt.most_common(1):
            return k

相关文章:

  • SQL Server:触发器
  • 【最后203篇系列】026 FastAPI+Celery(续)
  • 网络原理(详解TCP原理,应答机制三握四挥等)
  • oracle常用sql
  • 2025年渗透测试面试题总结-某 欧科云链-安全开发(题目+回答)
  • 使用 Sales_data 类实现交易合并(三十)
  • Clion刷题攻略-配置Cmake
  • TypeError: __init__() got an unexpected keyword argument ‘device_type‘
  • 模型部署与调用
  • OrbStack 作为 Mac 用户的 Docker 替代方案
  • 数据结构每日一题day9(顺序表)★★★★★
  • Thrust库中,host_vector和device_vector数据之间如何高效传输,有异步传输方式吗?
  • Linux 企业项目服务器组建(附脚本)
  • C++学习笔记(三十二)——priority_queue
  • Java基础 4.1
  • OpenLayers:海量图形渲染之矢量切片
  • 07-01-自考数据结构(20331)- 排序-内部排序知识点
  • 【14】Selenium的基本使用
  • 一道积分_4
  • DJI上云API使用与配置
  • 上海国际电影节纪录片单元,还世界真实色彩
  • 央媒评网红质疑胖东来玉石定价暴利:对碰瓷式维权不能姑息
  • 新能源汽车,告别混乱创新
  • 观察|“双雄”格局下电池制造商如何生存:加码不同技术、抢滩新赛道
  • 一海南救护车在西藏无任务拉警笛开道,墨脱警方:已处罚教育
  • 英媒:英国首相住所起火,目前无人伤亡