• 【算法】二分查找-20231121


    在这里插入图片描述

    一、344. 反转字符串

    提示
    简单
    865
    相关企业
    编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

    不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

    示例 1:

    输入:s = [“h”,“e”,“l”,“l”,“o”]
    输出:[“o”,“l”,“l”,“e”,“h”]
    示例 2:

    输入:s = [“H”,“a”,“n”,“n”,“a”,“h”]
    输出:[“h”,“a”,“n”,“n”,“a”,“H”]

    class Solution:
    
        def func(self,nums):
            left=0
            right=len(nums)-1
            self.reverse(nums,left,right)
    
        def reverse(self,nums,start,end):
            while start<end:
                nums[start],nums[end]=nums[end],nums[start]
                start+=1
                end-=1
    
    nums=["h","e","l","l","o"]
    ss=Solution()
    ss.func(nums)
    print(nums)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    二、392. 判断子序列

    简单

    给定字符串 s 和 t ,判断 s 是否为 t 的子序列。

    字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。

    进阶:

    如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?

    致谢:

    特别感谢 @pbrother 添加此问题并且创建所有测试用例。

    示例 1:

    输入:s = “abc”, t = “ahbgdc”
    输出:true
    示例 2:

    输入:s = “axc”, t = “ahbgdc”
    输出:false

    def test4(s,t):
    
        j=0
        for i in t:
            if s[j]==i:
                j+=1
    
                if j==len(s)-1:
                    return True
        return False
    
    s="axc"
    t="ahbgdc"
    print(test4(s, t))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    三、581. 最短无序连续子数组

    中等
    1.1K
    相关企业
    给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。

    请你找出符合题意的 最短 子数组,并输出它的长度。

    示例 1:

    输入:nums = [2,6,4,8,10,9,15]
    输出:5
    解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。
    示例 2:

    输入:nums = [1,2,3,4]
    输出:0
    示例 3:

    输入:nums = [1]
    输出:0

    思路:
    1、我们将数据进行排序
    2、然后左右指针从0和len(nums)-1开始向中间靠拢
    3、找到左右第一个与原数组不相同的下标终止即可

    def test5(nums):
        new_nums=sorted(nums)
        left=0
        right=len(nums)-1
        while left<len(nums):
            if nums[left]!=new_nums[left]:
                break
            left+=1
    
        while right>left:
            if nums[right]!=new_nums[right]:
                break
            right-=1
    
        return right-left+1
    
    nums=[1]
    print(test5(nums))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    四、680. 验证回文串 II

    简单

    给你一个字符串 s,最多 可以从中删除一个字符。
    请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。

    示例 1:

    输入:s = “aba”
    输出:true
    示例 2:

    输入:s = “abca”
    输出:true
    解释:你可以删除字符 ‘c’ 。
    示例 3:

    输入:s = “abc”
    输出:false

    def test5(s):
        left=0
        right=len(s)-1
        while left<right:
            if s[left]==s[right]:
                left+=1
                right-=1
            else:
                return s[left:right]==s[left:right][::-1] or s[left+1:right+1]==s[left+1:right+1][::-1]
    
        return True
    
    s='abca'
    print(test5(s))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

  • 相关阅读:
    记录paddlepaddle-gpu安装
    PIGOSS BSM:网络大屏展现功能与特色全面解析
    防火墙NAT实验(接上一个用认证实验)
    内存泄漏?
    Java 接口详解
    LeetCode【4】寻找两个正序数组中位数
    Redis 常见问题
    TCP通信实战:模拟BS系统
    odoo 云部署
    一文搞懂浅拷贝与深拷贝到底有什么区别
  • 原文地址:https://blog.csdn.net/YZL40514131/article/details/134498145