【算法】二分查找-20231120

这里写目录标题

  • [一、75. 颜色分类](#一、75. 颜色分类)
  • [二、80. 删除有序数组中的重复项 II](#二、80. 删除有序数组中的重复项 II)
  • [三、125. 验证回文串](#三、125. 验证回文串)
  • [四、189. 轮转数组](#四、189. 轮转数组)

一、75. 颜色分类

提示

中等

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

必须在不使用库内置的 sort 函数的情况下解决这个问题。

示例 1:

输入:nums = 2,0,2,1,1,0

输出:0,0,1,1,2,2

示例 2:

输入:nums = 2,0,1

输出:0,1,2

思路:快速排序

python 复制代码
def fast_sort(nums):
    if len(nums) <= 1:
        return nums
    povit = nums[0]
    left = []
    right = []
    for i in range(1, len(nums)):
        if nums[i] < povit:
            left.append(nums[i])
        else:
            right.append(nums[i])
    return fast_sort(left) + [povit] + fast_sort(right)


nums = [2, 0, 2, 1, 1, 0]
print(fast_sort(nums))

二、80. 删除有序数组中的重复项 II

中等

932

相关企业

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

示例 1:

输入:nums = 1,1,1,2,2,3

输出:5, nums = 1,1,2,2,3

解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。 不需要考虑数组中超出新长度后面的元素。

示例 2:

输入:nums = 0,0,1,1,1,1,2,3,3

输出:7, nums = 0,0,1,1,2,3,3

解释:函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3。不需要考虑数组中超出新长度后面的元素。

python 复制代码
def test(nums):
    slow=2
    fast=2
    while fast<len(nums):
        if nums[fast]!=nums[slow-2]:
            nums[slow]=nums[fast]
            fast+=1
            slow+=1
        else:
            fast+=1
    return slow

nums=[0,0,1,1,1,1,2,3,3]
print(test(nums))

三、125. 验证回文串

简单

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。

示例 1:

输入: s = "A man, a plan, a canal: Panama"

输出:true

解释:"amanaplanacanalpanama" 是回文串。

示例 2:

输入:s = "race a car"

输出:false

解释:"raceacar" 不是回文串。

示例 3:

输入:s = " "

输出:true

解释:在移除非字母数字字符之后,s 是一个空字符串 "" 。

由于空字符串正着反着读都一样,所以是回文串。

python 复制代码
s = "A man, a plan, a canal: Panama"
res=s.replace(' ','').replace(',','').replace(':','').lower()
print(res)
def test2(s):
    left=0
    right=len(s)-1
    while left<=right:
        if s[left]==s[right]:
            left+=1
            right-=1
        else:
            return False
    return True
s="raceacar"
print(test2(s))

四、189. 轮转数组

提示

中等

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

示例 1:

输入: nums = 1,2,3,4,5,6,7, k = 3

输出: 5,6,7,1,2,3,4

解释:

向右轮转 1 步: 7,1,2,3,4,5,6

向右轮转 2 步: 6,7,1,2,3,4,5

向右轮转 3 步: 5,6,7,1,2,3,4

示例 2:

输入:nums = -1,-100,3,99, k = 2

输出:3,99,-1,-100

解释:

向右轮转 1 步: 99,-1,-100,3

向右轮转 2 步: 3,99,-1,-100

解题思路

三次翻转,先整体翻转,然后根据K的位置前后局部翻转。

python 复制代码
class Solution:
    def rotate(self,nums,k):
        k=k%len(nums)
        self.reverse(nums,0,len(nums)-1)
        self.reverse(nums,0,k-1)
        self.reverse(nums,k,len(nums)-1)

    def reverse(self,nums,start,end):
        while start<end:
            nums[start],nums[end]=nums[end],nums[start]
            start+=1
            end-=1

nums=[1,2,3,4,5,6,7]
k=3
S=Solution()
S.rotate(nums, k)
print(nums)
相关推荐
YYYing.12 小时前
【Agent系列 (十一) 】上下文工程
人工智能·python·ai·agent·上下文工程
计算机毕业编程指导师12 小时前
基于深度学习的光伏组件红外图像缺陷识别系统设计与实现
人工智能·python·深度学习·目标检测·毕业设计·课程设计·光伏
前端精髓12 小时前
langchain 短期记忆(状态)动态运行时上下文
python·langchain
AiNightVision12 小时前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件
最强小杰13 小时前
DeepSeek V4 Flash + Codex CLI 接入教程:原生 Responses API 适配,从配置到跑通收藏这篇就够了(2026)
java·前端·python·ai
牧羊人.33313 小时前
卷积神经网络之VGG
人工智能·深度学习·神经网络·算法·cnn
DeepVisionary14 小时前
为拿并网许可,OpenAI在佐治亚新园区同意高峰期断电三成
python·自动化
小郎君65814 小时前
Vue 多标签页的加载态设计:为什么我没有用 Suspense 实现 PageLoading
vue.js·算法
VIP_CQCRE14 小时前
内容自动化越跑越乱?先补上状态、去重和失败恢复
python·ai·工作流·幂等设计·内容自动化