返回

《剑指 Offer(专项突击版)》第 3|4 题深入解析,算法入门者的必修课

前端

前言

随着前端技术的发展,对开发人员的算法能力要求也日益提高。算法题往往出现在面试环节,成为衡量求职者技术水平的重要指标。而《剑指 Offer(专项突击版)》作为算法入门经典,其第 3|4 题更是必备的练习题。

第 3 题:数组中重复的数字

题目:
给定一个长度为 n 的数组 nums,数组中所有元素都在范围 [0, n-1] 内,且每个元素均出现一次,唯独一个元素出现两次。找出这个重复的元素。

解析:
这道题考查的是数组中重复元素的查找问题。我们可以采用 "哈希表" 的思路来解决。

  • 创建一个哈希表,将数组中的元素作为键,出现次数作为值。
  • 遍历数组,对于每个元素,检查哈希表中是否存在其键。
  • 如果存在,则表明元素重复,返回该元素。
  • 如果不存在,则将元素作为键,1 作为值添加到哈希表中。

代码实现:

def find_duplicate(nums):
    hashtable = {}
    for num in nums:
        if num in hashtable:
            return num
        else:
            hashtable[num] = 1
    return None

第 4 题:二维数组中的查找

题目:
给定一个 m x n 的二维数组 matrix,该数组由非负整数组成。编写一个函数,查找数组中是否存在某个值 target。

解析:
这道题考查的是二维数组中的查找问题。我们可以采用 "分治" 的思路来解决。

  • 从二维数组的左上角开始,将数组划分为四个部分:左上、右上、左下、右下。
  • 比较 target 和左上部分的中间元素,如果相等,则返回 true。
  • 如果 target 小于中间元素,则递归查找左上部分。
  • 如果 target 大于中间元素,则递归查找右下部分。
  • 如此循环下去,直到找到 target 或搜索范围为空。

代码实现:

def find_in_matrix(matrix, target):
    if not matrix:
        return False

    rows, cols = len(matrix), len(matrix[0])
    start_row, start_col = 0, 0
    end_row, end_col = rows - 1, cols - 1

    while start_row <= end_row and start_col <= end_col:
        mid_row = (start_row + end_row) // 2
        mid_col = (start_col + end_col) // 2

        if matrix[mid_row][mid_col] == target:
            return True
        elif matrix[mid_row][mid_col] < target:
            start_row = mid_row + 1
        else:
            end_row = mid_row - 1

    return False

结语

通过对《剑指 Offer(专项突击版)》第 3|4 题的深入解析,相信读者对算法题的解题方法有了更深入的理解。算法题的练习需要持之以恒,熟练掌握常用的算法技巧至关重要。不断刷题,总结规律,才能在面试中游刃有余,斩获心仪的 Offer。