【剑指offer 三刷】问题反复

这篇博客探讨了数组旋转问题、正则表达式匹配的动态规划解法,以及如何利用确定有限状态自动机解决字符串转换问题。还涉及了二叉搜索树转化为双向链表的挑战,以及数据流中中位数的实时计算,通过大根堆和小根堆实现。此外,博主分享了数组中逆序对的归并排序算法,以及位运算在数组操作中的应用,如计数1的出现次数和加法运算。最后提到了单调队列在滑动窗口最大值和队列最大值问题中的应用。
摘要由CSDN通过智能技术生成

剑指Offer11.旋转数组的最小数字

裂开,这题的二分怎么这么烦。。。比小的那边好像就不对的样子???

剑指Offer19.正则表达式匹配

  • 动态规划
    这次好一些,理解的更清楚了,需要判断转移条件,另外 d p [ 0 ] [ 0 ] = T r u e dp[0][0]=True dp[0][0]=True

剑指Offer20.表示数值的字符串

确定有限状态自动机

这玩意儿我真吐了。。自动机肯定能写,但是确定状态和转移状态是真恶心。。。这题背一下就好吧可能。。

剑指Offer36.二叉搜索树与双向链表

得。。。又不会了,都快出现生理抗拒了 = =

剑指Offer41.数据流中的中位数

一个大根堆一个小根堆√
这个吧。。堆的代码用法得记一下,不太熟练,会忘 = =

剑指Offer43.1~n整数中1出现的次数

依旧不会,还不想看

剑指offer51.数组中的逆序对

归并排序
这个题太绕了,得先把归并排序搞清楚!

  1. 给两部分分别排序,计算出各自的逆序对数
  2. 合并两部分,算出总的逆序对数

注意看代码中的注释,思想很妙

class Solution:
    def mergeSort(self, nums, tmp, l, r):
        if l >= r:
            return 0
        mid = (l + r) // 2
        count = self.mergeSort(nums, tmp, l, mid) + self.mergeSort(nums, tmp, mid+1, r)
        a = l
        b = mid + 1
        pos = l
        while a <= mid and b <= r:
            if nums[a] <= nums[b]:
                tmp[pos] = nums[a]
                a += 1
                count += (b-mid-1)
                # 最最精彩的地方!!!如果nums[a] > nums[b],那么nums[b]就会被放到tmp里,但还不知道下一个,也就是nums[b+1]跟nums[a]比谁大谁小,而当找到了nums[a]<nums[b]的时候,说明这之前的nums[b-i]都是小于nums[a]的了。
            else:
                tmp[pos] = nums[b]
                b += 1
            pos += 1
        # 往下两个循环是为了解决剩余的部分长度,两个循环只会有一个被执行
        for k in range(a, mid+1):
            tmp[pos] = nums[k]
            count += (b-mid-1)
            pos += 1
        for k in range(b, r+1):
            tmp[pos] = nums[k]
            pos += 1
		# 给tmp是排序后的序列,要给nums赋值
        nums[l:r+1] = tmp[l:r+1]
        return count

    def reversePairs(self, nums: List[int]) -> int:
        tmp = [0] * len(nums)
        return self.mergeSort(nums, tmp, 0, len(nums)-1)

剑指Offer53-I.在排序数组中查找数字I

好像有点开窍,又好像没有。。

剑指Offer56-I.数组中数字出现的次数

剑指Offer56-II.数组中数字出现的次数II

这俩题都有 位运算 的解法,需要关注一下,之前不太会用位运算。

剑指Offer59-I.滑动窗口的最大值

单调队列 还需要加深理解,得记住是个什么流程,比new_target小的队列中的元素都要出队

剑指Offer59-II.队列的最大值

这题也是单调队列方法,跟上面那个一起巩固一下。

剑指Offer65.不用加减乘除做加法

我裂了,位运算加减法,python自身性质还不一样。。。。。。

[追更] 补了一下知识,目前感觉还行,再来一遍可能就好了

[追更 2] 不行,又忘了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值