剑指 Offer(第 2 版)题解

文章介绍了《剑指Offer》这本书中涉及的几道典型编程面试题目,包括寻找数组中重复的数字、替换空格、二维数组中的查找、从尾到头打印链表以及求最小的k个数和丑数问题。解决方案涵盖了Python代码实现,涉及到哈希表、二分查找、链表操作和排序等算法知识。
摘要由CSDN通过智能技术生成

《剑指 Offer(第 2 版)》通行全球的程序员经典面试秘籍。剖析典型的编程面试题,系统整理基础知识、代码质量、解题思路、优化效率和综合能力这 5 个面试要点。

剑指 Offer 03. 数组中重复的数字

class Solution:
    def findRepeatNumber(self, nums: List[int]) -> int:
        zi={}
        ans=0

        for i in nums:
            try:
                zi[i]+=1
                ans=i
            except:zi[i]=1
        return ans

剑指 Offer 05. 替换空格

class Solution:
    def replaceSpace(self, s: str) -> str:

        return s.replace(' ','%20')

剑指 Offer 04. 二维数组中的查找

class Solution:
    def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
        f=False
        for i in range(len(matrix)):
            k=bisect.bisect_left(matrix[i],target)
            # print(k)
            try:
                if matrix[i][k]==target:
                    f=True
                    break
            except:
                continue
        return f

剑指 Offer 06. 从尾到头打印链表

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reversePrint(self, head: ListNode) -> List[int]:
        a=[]
        
        while head and head.next:
            a.append(head.val)
            head=head.next
        try:
            a.append(head.val)
        except:
            pass
        # print(head.next)
        # print(head)
        # print(a)
        return a[::-1]

剑指 Offer 40. 最小的k个数

class Solution:
    def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
        arr.sort()
        return arr[:k]

剑指 Offer 49. 丑数

class Solution:
    def nthUglyNumber(self, n: int) -> int:
        
        h=[1]
        zi={1:0}
        for i in range(n-1):
            k=heapq.heappop(h)
            for j in [2,3,5]:
                a=k*j
                if zi.get(a,1):
                    zi[a]=0
                    heapq.heappush(h,a)

        return heapq.heappop(h)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值