【算法】算法题-20231117

这里写目录标题

一、搜索插入位置(35)

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

请必须使用时间复杂度为 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

python 复制代码
def erfen_search_insert(nums, target):
    left = 0
    right = len(nums) - 1

    while left <= right:
        mid = (right + left) // 2
        if nums[mid] == target:
            return mid
        elif nums[mid] > target:
            right = mid - 1
        else:
            left = mid + 1
    return left

二、字符串相乘(43)

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

示例 1:

输入: num1 = "2", num2 = "3"

输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"

输出: "56088"

python 复制代码
def test11(nums1, nums2):
    res = 0
    for i, v in enumerate(nums1[::-1]):
        for j, u in enumerate(nums2[::-1]):
            res += int(v) * int(u) * (10 ** (i + j))
    return str(res)


res = test11('123', '456')
print(res)

三、两个相同字符之间的最长子字符串(1624)

给你一个字符串 s,请你返回 两个相同字符之间的最长子字符串的长度 ,

计算长度时不含这两个字符。如果不存在这样的子字符串,返回 -1 。

子字符串 是字符串中的一个连续字符序列。

示例 1:

输入:s = "aa"

输出:0

解释:最优的子字符串是两个 'a' 之间的空子字符串。

示例 2:

输入:s = "abca"

输出:2

解释:最优的子字符串是 "bc" 。

示例 3:

输入:s = "cbzxy"

输出:-1

解释:s 中不存在出现出现两次的字符,所以返回 -1 。

示例 4:

输入:s = "cabbac"

输出:4

解释:最优的子字符串是 "abba" ,其他的非最优解包括 "bb" 和 "" 。

思路:
遍历所有的字符
当这个字符在字符串中出现两次时,计算第一个索引和最后一个索引中间的子字符串的数量

python 复制代码
def max_value(strs):
    n=-1
    for i in set(strs):
        if strs.count(i)>1:
            n=max(n,strs.rfind(i)-strs.find(i)-1)
    return n
s = "cabbac"
r=max_value(s)
print(r)

四、给你一个 有效括号字符串 s,返回该字符串的 s 嵌套深度

例如:""、"()()"、"()(()())" 都是 有效括号字符串(嵌套深度分别为 0、1、2),而 ")(" 、"(()" 都不是 有效括号字符串 。

给你一个 有效括号字符串 s,返回该字符串的 s 嵌套深度

示例 1:

输入:s = "(1+(2*3)+((8)/4))+1"

输出:3

解释:数字 8 在嵌套的 3 层括号中。

示例 2:

输入:s = "(1)+((2))+(((3)))"

输出:3

思路:
python 栈思想
核心思路其实就是统计最大的连续左括号的数量。
遍历整个字符串,遇到左括号,总数+1,遇到右括号总数-1。
实时更新最大连续左括号的数量。

python 复制代码
def test(strs):
    res=0
    ret=0
    for i in strs:
        if i =="(":
            ret+=1
            res=max(ret,res)
        elif i==")":
            ret-=1
    return res
s = "(1)+((2))+(((3)))"
r=test(s)
print(r)
相关推荐
踏着七彩祥云的小丑2 小时前
pytest——Mark标记
开发语言·python·pytest
W23035765733 小时前
经典算法:最长上升子序列(LIS)深度解析 C++ 实现
开发语言·c++·算法
2401_892070983 小时前
链栈(链式栈) 超详细实现(C 语言 + 逐行精讲)
c语言·数据结构·链栈
不爱吃炸鸡柳3 小时前
Python入门第一课:零基础认识Python + 环境搭建 + 基础语法精讲
开发语言·python
minji...4 小时前
Linux 线程同步与互斥(三) 生产者消费者模型,基于阻塞队列的生产者消费者模型的代码实现
linux·运维·服务器·开发语言·网络·c++·算法
Dxy12393102164 小时前
Python基于BERT的上下文纠错详解
开发语言·python·bert
语戚5 小时前
力扣 968. 监控二叉树 —— 贪心 & 树形 DP 双解法递归 + 非递归全解(Java 实现)
java·算法·leetcode·贪心算法·动态规划·力扣·
skywalker_115 小时前
力扣hot100-7(接雨水),8(无重复字符的最长子串)
算法·leetcode·职场和发展
SiYuanFeng5 小时前
Colab复现 NanoChat:从 Tokenizer(CPU)、Base Train(CPU) 到 SFT(GPU) 的完整踩坑实录
python·colab