《剑指offer》第二版

《剑指Offer》第二版源代码(Java实现+JUnit4测试) 文章目录《剑指Offer》第二版源代码(Java实现+JUnit4测试)代码地址运行环境软件架构 《剑指Offer》第二版源代码(Java实现+JUnit4测试) 代码地址 地址:program 说明:将代码 Fork 到自己的 gitee 中,使用Web IDE查看会极度舒适! 运行环境 jdk 1.8_0_251 Intellij IDEA 2019.3 软件架构 main.java.com.cty: Java实现 Base:面试需要的基础知识 面试题2:实现Singleton模式 阅读详情

剑指offer

03. 数组中重复的数字

class Solution:
    def findRepeatNumber(self, nums: List[int]) -> int:
        visited = set()
        for num in nums:
            if num in visited:
                return num
            visited.add(num)

04. 二维数组中的查找

站在右上角看

class Solution:
    def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
        if not matrix:
            return False
        m, n = len(matrix), len(matrix[0])

        i, j = 0, n - 1

        while 0 <= i < m and 0 <= j < n:
            if matrix[i][j] == target:
                return True
            elif matrix[i][j] > target:
                j -= 1
            elif matrix[i][j] < target:
                i += 1
        
        return False

二分法的话可以对每一行二分,但是还不如按照二叉搜索树来找。

05. 替换空格

class Solution:
    def replaceSpace(self, s: str) -> str:
        words = s.split(' ')
        return '%20'.join(words)

06. 从尾到头打印链表

class Solution:
    def reversePrint(self, head: ListNode) -> List[int]:
        nums = []
        cur = head
        while cur:
            nums.append(cur.val)
            cur = cur.next
        
        return nums[::-1]

07. 重建二叉树(🎂)

class Solution:
    def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
        def recur(root, left, right):
            '''
            root: 先序遍历中的根节点坐标
            left: 中序遍历中左子树的左边界
            right: 中序遍历中右子树的右边界
            '''
            if left > right: return
            # 建立根节点
            node = TreeNode(preorder[root])
            i = dic[preorder[root]]  # 找到根节点在中序遍历中的位置
            node.left = recur(root + 1, left, i-1) # 重建左子树
            node.right = recur(i - left + root + 1, i+1, right) # 重建右子树
            return node


        dic = {
   
   }
        for i, num in enumerate(inorder):
            dic[num] = i
        
        return recur(0, 0, len(inorder) - 1)

剑指 Offer 09. 用两个栈实现队列

class CQueue:

    def __init__(self):
        self.stack1 = []
        self.stack2 = []

    def appendTail(self, value: int) -> None:
        self.stack1.append(value)

    def deleteHead(self) -> int:
        if self.stack2:
            return self.stack2.pop()
        
        while self.stack1:
            self.stack2.append(self.stack1.pop())
        
        if self.stack2:
            return self.stack2.pop()
        return -1
class CQueue:

    def __init__(self):
        self.stack1 = []
        self.stack2 = []

    def appendTail(self, value: int) -> None:
        self.stack1.append(value)

    def deleteHead(self) -> int:
        if self.stack2:
            return self.stack2.pop()
        if not self.stack1: return -1
        while self.stack1:
            self.stack2.append(self.stack1.pop())
        
        return self.stack2.pop()

10- I. 斐波那契数列(🎂 自己实现LRU)

class Solution:
    def fib(self, n: int) -> int:
        # 迭代
        if n < 2: return n
        a, b = 0, 1

        for _ in range(n-1):
            c = int((a + b) % (1e9+7))
            a = b
            b = c
        
        return c
class Solution:
    def fib(self, n: int) -> int:
        # 强行递归,会超时
        if n < 2: return n
        return (self.fib(n-1) + self.fib(n-2)) % (1e9+7)
class Solution:
    @lru_cache
    def fib(self, n: int) -> int:
        # 强行递归,会超时
        if n < 2: return n
        return int((self.fib(n-1) + self.fib(n-2)) % (1e9+7))

自己实现LRU_Cache

import collections

class LRU_Cache:
    def __init__(self, func):
        self.func = func
        self.cache = {
   
   }
    def __call__(self, *args):
        if args in self.cache:
            return self.cache[args]
        else:
            self.cache[args] = self.func(*args)
            return self.cache[args]


def fib(n):
    if n < 2: return n
    return fib(n-1) + fib(n-2)

print(fib(10))

10- II. 青蛙跳台阶问题

class Solution:
    def numWays(self, n: int) -> int:
        if n == 0: return 1
        if n <= 2: return n
        a, b = 1, 1

        for _ in range(n-1):
            c = int((a + b) % (1e9 + 7))
            a = b
            b = c
        
        return c

11. 旋转数组的最小数字(🎂)

class Solution:
    def minArray(self, numbers: List[int]) -> int:
        # 二分法
        n = len(numbers)
        l, r = 0, n - 1

        while l < r:
            mid = l + (r - l) // 2
            # 后半段是无序, 最小值肯定在前半段
            if numbers[mid] < numbers[r]:
                r = mid
            # 后半段是有序的,但是不能确定最小值一定在后半段
            elif numbers[mid] > numbers[r]:
                l = mid + 1
            else:
                r -= 1
        
        return numbers[l]

12. 矩阵中的路径(🎂)

class Solution:
    def exist(self, board: List[List[str]], word: str) -> bool:
        def dfs(i, j, k):
            if k >= len(word): return True
            if i < 0 or i >= len(board) or j < 0 or j >= len(board[0]) or board[i][j] != word[k]:
                return False
            if not board[i][j]: return False
            board[i][j] = ''

            up = dfs(i-1, j, k+1)
            down = dfs(i+1, j, k+1)
            left = dfs(i, j-1, k+1)
            right = dfs(i, j+1, k+1)
            board[i][j] = word[k]   # 取消操作
            return up or down or left or right
        m, n = len(board), len(board[0])
        visited = [[False] * n for _ in range(m)]
        for i in range(m):
            for j in range(n):
                if board[i][j] == word[0]:
                    res = dfs(i, j, 0)
                    if res: return True
        
        return False

14- I. 剪绳子

class Solution:
    def cuttingRope(self, n: int) -> int:
        # 拆成2,3就行了
        # 因为2只能拆成1+1,而1x1=1<2
        # 3只能拆成2+1或者1+1+1,乘积都小于3,而4就开始不一样了
        if n == 2: return 1
        if n == 3: return 2

        three_nums = n // 3
        left = n % 3

        if left == 1:
            three_nums -= 1
            left += 3
        elif left == 0:
            left = 1
        return 3 ** three_nums * left

14- II. 剪绳子 II

class Solution:
    def cuttingRope(self, n: int) -> int:
        # 本题不可以先拆再直接算,因为中间有些值可能过大,需要取模
        if n == 2: return 1
        if n == 3: return 2

        res = 1
        while n > 0:
            if 2 <= n <= 4:
                break
            n = n - 3
            res = int((res * 3) % (1e9+7))
        
        return int((res * n) % (1e9+7))

15. 二进制中1的个数

class Solution:
    def hammingWeight(self, n: int) -> int:
        res = 0
        while n:
            res += n & 1
            n = n >> 1
        
        return res

16. 数值的整数次方(🎂 快速幂)

递归,但是递归会出现超出最大递归深度。

class Solution:
    def myPow(self, x: float, n: int) -> float:
        if n 
基于ResNet-50的猫狗分类训练 基于ResNet-50的猫狗分类python训练 阅读详情

相关推荐

c# U盘禁用---守护进程(插入,拔出,卸载等操作)

一、简介 传统的对U盘禁用,我们多采用修改注册表的方式,详情参考:https://blog.youkuaiyun.com/qq_25372599/article/details/79815407;本文将介绍一种其他的方式–后台守护程序。其原理非常简单:当守护程序检测到U盘的插入信号,我们自动卸载U盘,致使系统无法识别U盘,达到禁用U盘的效果。 二、程序设计 2.1 变量定义 strin...

星星之火燃亮码空 2845

有限状态机FSM详解(一)

有限状态机在维基百科中的解释是: 有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。 至于为什么要学FSM,FSM可以把模型的多状态、多状态间的转换条件解耦。可以使维护变得容易,代码也更加具有可读性,也更加艺术。 理解有限状态机首先需要理解整个模型。我们把灯的开关作为示例,...

benjonc的博客 5万+

领域驱动设计整理——实体和值对象设计

实体引言在领域驱动设计里,实体的设计可以说是通用语言的核心,也是最开始在模型划分中需要考虑的。怎么样设计实体和怎么样划分限界上下文同样重要。实体的概念就是要保证通用语言的完整性。领域驱动让设计实体的关注点从数据的属性和表的关联转化到了富有行为的领域概念上。 实体是具有可变性的,这是一个和值对象比较明显的区分,也即实体是可以持续得变化,持续得修改,并且具有唯一的标识。在设计实体的时候需要跳出CRUD的

马猴烧酒└(┐卍^o^)卍ドゥルルル~楪詩月「YUZURIHA SHIZUKI」 2万+

python实现ECMS算法

ECMS(Equivalent Consumption Minimization Strategy)算法是一种用于混合动力汽车能量管理系统的优化策略。它通过计算等效油耗来平衡电池电量消耗和燃油消耗,从而优化整体能耗。以下是一个简单的Python实现,用于演示ECMS算法的基本思想。这个实现假设了一个简单的混合动力汽车模型,其中电池电量和燃油消耗是主要的优化目标。

weixin_45570158的博客 922

别再混淆了!5分钟搞懂机器人导纳控制与阻抗控制的本质区别(附Simulink对比仿真)

本文深入解析机器人柔顺控制中的导纳控制与阻抗控制的本质区别,通过信号流方向、架构对比和应用场景三个关键视角进行详细阐述。文章还提供Simulink对比仿真案例,帮助读者快速理解两种控制策略的差异及其适用场景,特别适合机器人控制领域的研究者和工程师参考。

weixin_42543046的博客 604

mt7601 kernel 4.19内核集成版本,以及源码编译相关问题

/os/linux/Makefile.6文件: 添加 EXTRA_CFLAGS += -Wno-incompatible-pointer-types -Wno-date-time。看下iwpriv与iwconfig的源码区别,左侧为iwconfig ,没有用到ioctl,右侧为iwpriv。1、init_timer kernel 4.19内核版本API已经改变,使用timer_setup。使用iwpriv 提示如下,iwpriv工具无法使用了,而iwconfig可以使用。makefile的修改。

1590

1个PID回路如何连接2个执行器(算法和代码)

我们先看下位置型PID的控制框图:2、PID是基于error的控制 所以反馈信号跳动、干扰非常大的话,对PID的闭环控制影响是非常大的,所以对于反馈信号、一定要抗干扰和滤波处理。3、下图是增量型PID的控制框图:4、一个PID输出回路如何连接2个执行器?(有些系统会设置热阀和冷阀才能满足控制要求)。

RXXW_Dor的博客 1810

基于 MFC C++ 的心电监测客户端

4. **报警功能**:使用 `PlaySound` 播放报警音(需准备 `alert.wav` 文件),界面显示报警状态。

寒寒豆豆软件公司的博客 90

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 解决ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found
下一篇: 【LeetCode热题100】
PaperReader
博客等级 码龄5年 1粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值