【金三银四】27道基础算法题,学完让你对算法有豁然开朗的感觉(推荐小白)

目录

前言

本文参考力扣官网、以及该文章:https://zhuanlan.zhihu.com/p/632616380

本套题目涵盖了数组、字符串、哈希表、链表、二叉树等常见数据结构,以及二分查找、滑动窗口、深度优先搜索(DFS)、广度优先搜索(BFS)等经典算法。通过这些题目的学习,您将不仅掌握算法的基本原理,还能在实际编程中运用自如。

特别推荐小白读者尝试这些题目,因为它们将从零开始,引导您逐步深入算法的世界。相信学完这些题目后,您会对算法有豁然开朗的感觉,不仅能够在面试中应对自如,还能在未来的工作中更加得心应手。

数组

数组(Array)是一种用于存储多个相同类型元素的数据结构。在编程中,数组提供了一种便捷的方式来组织和访问大量数据。数组通常具有固定大小,每个元素在数组中都有一个唯一的索引,通过索引可以快速定位和访问数组中的元素。

1. 704. 二分查找 (Binary Search) - Easy

public class BinarySearch {
   
   public int search(int[] nums, int target) {
   
       int left = 0, right = nums.length - 1;
       while (left <= right) {
   
           int mid = left + (right - left) / 2;
           if (nums[mid] == target) {
   
               return mid;
           } else if (nums[mid] < target) {
   
               left = mid + 1;
           } else {
   
               right = mid - 1;
           }
       }
       return -1;
   }
}

解析:
这段代码实现了经典的二分查找算法。下面是对这段代码的解析:

  1. BinarySearch 类:这是一个 Java 类,用于实现二分查找算法。

  2. search 方法:search 方法接受两个参数,一个是整型数组 nums,另一个是要查找的目标值 target。该方法返回目标值在数组中的索引,如果不存在则返回 -1。

  3. left 和 right 变量:这两个变量分别表示当前查找范围的左右边界。初始时,left 指向数组第一个元素的索引 0,right 指向数组最后一个元素的索引 nums.length - 1。

  4. while 循环:利用 while 循环进行二分查找,当 left 小于等于 right 时,继续查找。

  5. mid 变量:计算中间位置 mid,通过 (left + right) / 2 或者 left + (right - left) / 2 这种方式避免整数溢出。

  6. 比较 nums[mid] 与 target

    • 如果 nums[mid] 等于 target,则找到目标值,返回 mid。
    • 如果 nums[mid] 小于 target,则说明目标值在右侧,更新 left 为 mid + 1。
    • 如果 nums[mid] 大于 target,则说明目标值在左侧,更新 right 为 mid - 1。
  7. 循环直到 left 大于 right,表示查找范围为空,此时返回 -1,表示未找到目标值。

这段代码实现了简洁高效的二分查找算法,时间复杂度为 O(log n),适用于有序数组的查找。在实际应用中,二分查找是一种常用且重要的算法,能够快速地定位目标值所在的位置,提高查找效率。

2. 27. 移除数组元素 (Remove Element) - Easy

public class RemoveElement {
   
   public int removeElement(
### 关于2025年Java春季招聘(金三银)面试题目 对于即将到来的2025年,在“金三银”的时间段内,求职者可能会遇到一系列针对Java开发者的典型面试问题。这些问题不仅涵盖了基础概念,还包括高级特性以及框架的应用。 #### 基础知识考察 常见的基础知识类问题可能涉及数据结构与算法的理解程度,例如如何实现快速排序[^1]: ```python def quick_sort(arr): if len(arr) <= 1: return arr else: pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quick_sort(left) + middle + quick_sort(right) ``` 此外,还会有面向对象编程原则、异常处理机制等方面的内容被提及。 #### 深入技术探讨 更深入的技术讨论则会围绕多线程编程、内存管理等主题展开。比如解释什么是死锁及其预防措施;或是描述垃圾回收的工作原理及优化策略。 #### 实战经验评估 实战项目经历同样重要,尤其是分布式系统的构建经验和微服务架构下的设计思路。Dubbos作为流行的RPC远程调用框架之一,在实际工作中应用广泛,因此有关Dubbo的相关配置和使用场景也会成为关注焦点[^2]。 考虑到每年初都是跳槽高峰期,“金三银”期间企业对人才的需求较大,这为求职者提供了更多机会展示自我并找到理想工作[^3]。 为了帮助广大开发者更好地迎接挑战,建议提前做好充分准备,熟悉上述提到的知识要点,并通过练习来巩固理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值