菜单

仓库结构与组织

相关源文件

本页面解释了 Interviews 存储库的组织方式,详细介绍了其文件夹结构和文件组织模式。无论您是按算法类型学习,还是为特定公司的面试做准备,它都提供了有效导航代码库的指导。有关存储库中涵盖的数据结构的更多信息,请参阅数据结构参考

概述

Interviews 存储库采用双重组织系统,旨在提供全面的技术面试准备资源。

  1. 按问题类别/主题(数据结构或算法类型)组织
  2. 按公司组织(针对公司特定的面试问题)

这种双重结构允许用户专注于掌握特定的数据结构和算法,或者为特定公司的面试做准备。

来源:README.md1-27 README.md374-521

顶级目录结构

存储库组织为多个顶级目录,反映了按主题或问题类型的首要组织。

目录描述示例文件
数组数组相关问题bestTimeToBuyAndSellStock.java, containsDuplicates.java
回溯回溯问题androidUnlockPatterns.java, generalizedAbbreviation.java
BinarySearch二分查找问题closestBinarySearchTreeValue.java, sqrt(x).java
BitManipulation位操作问题countingBits.java, hammingDistance.java
BreadthFirstSearchBFS问题binaryTreeLevelOrderTraversal.java, wallsAndGates.java
DepthFirstSearchDFS问题balancedBinaryTree.java, numberOfIslands.java
设计设计问题zigzagIterator.java
DynamicProgrammingDP问题houseRobber.java, climbingStairs.java
HashTable哈希表问题groupAnagrams.java, twoSum.java
链表链表问题addTwoNumbers.java, reverseLinkedList.java
队列队列问题movingAverageFromDataStream.java
排序排序问题meetingRooms.java
栈问题decodeString.java, trappingRainWater.java
字符串字符串问题addBinary.java, validPalindrome.java
树问题invertBinaryTree.java, validateBinarySearchTree.java
Trie树Trie问题implementTrie.java, wordSquares.java
TwoPointers双指针问题3Sum.java, mergeSortedArray.java
company公司特定问题为不同公司提供的各种子目录

来源:README.md374-521

双重组织系统

按主题/类别

问题根据其底层数据结构或算法模式进行分类。这种组织方式有助于用户专注于学习特定的问题解决技巧。

来源:README.md374-521 leetcode/dynamic-programming/HouseRobber.java1-26 leetcode/array/ContainsDuplicatesII.java1-18

按公司

问题也按公司进行组织,这些公司在面试中经常会问到这些问题。这种结构有助于用户有针对性地准备特定公司的面试。

来源:company/airbnb/HouseRobber.java1-26 company/linkedin/HouseRobber.java1-26 company/microsoft/AddDigits.java1-22 company/microsoft/LinkedListCycle.java1-30 company/adobe/AddDigits.java1-22 company/amazon/LinkedListCycle.java1-30 company/bloomberg/LinkedListCycle.java1-30 company/yahoo/LinkedListCycle.java1-30 company/palantir/ContainsDuplicatesII.java1-18 company/airbnb/ContainsDuplicatesII.java1-18

跨组织交叉引用

许多问题同时出现在基于主题和基于公司的组织中。这种交叉引用允许用户了解哪些公司会提出哪些类型的问题,并从不同角度着手准备。

示例:打家劫舍问题

Robber问题出现在多个位置

所有三个实现都包含相同的解决方案

来源:leetcode/dynamic-programming/HouseRobber.java1-26 company/airbnb/HouseRobber.java1-26 company/linkedin/HouseRobber.java1-26

示例:LinkedListCycle 问题

类似地,LinkedListCycle 问题也出现在多个公司目录中。

来源:company/microsoft/LinkedListCycle.java1-30 company/amazon/LinkedListCycle.java1-30 company/bloomberg/LinkedListCycle.java1-30 company/yahoo/LinkedListCycle.java1-30

解决方案文件结构

每个解决方案文件通常遵循标准格式。

  1. 文件顶部的注释中包含问题描述
  2. 包含实现的解决方案类
  3. 时间复杂度和空间复杂度考虑(在解决方案中隐含)

来自 HouseRobber.java 的示例结构

// Problem description
// You are a professional robber planning to rob houses along a street...

public class HouseRobber {
    public int rob(int[] nums) {
        // Implementation with dynamic programming approach
        ...
    }
}

来源: company/airbnb/HouseRobber.java1-26 leetcode/dynamic-programming/HouseRobber.java1-26

该存储库支持几种使用模式,具体取决于您的目标。

面向主题学习

  1. 导航到与您感兴趣的数据结构或算法相关的顶级目录。
  2. 学习该类别中各种问题的实现。
  3. 参考 README 中的解释以获得理论理解。

面向公司特定准备

  1. 导航到 company 目录。
  2. 选择目标公司的子目录。
  3. 研究该公司通常会问到的问题的实现。

面向全面准备

  1. 通过查看多个公司目录中出现的问题来识别常见模式。
  2. 专注于这些被多家公司问到的高频问题。
  3. 使用 README 中的理论解释来理解底层概念。

来源: README.md12-27 README.md41-53 README.md374-521

与文档资源的关联

该存储库在 README.md 文件中包含数据结构和算法的详细文档。这些文档通过提供以下内容来补充代码示例:

  1. 数据结构解释及时间复杂度分析
  2. 算法描述及其应用
  3. 使用大 O 符号进行的运行时分析

该文档为理解代码库中的问题解决方案提供了理论基础。

资源类型位置目的
数据结构解释README.md解释每个数据结构及其时间复杂度。
算法解释README.md详细介绍算法及其时间复杂度。
运行时分析README.md涵盖大 O、小 O、Omega 和 Theta 符号。
在线判题README.md列出练习平台。
在线编码练习README.md列出模拟面试平台。
视频讲解README.md教育内容链接。
面试书籍README.md推荐阅读材料。

来源: README.md61-186 README.md188-288 README.md330-352 README.md41-53 README.md55-59 README.md355-362 README.md364-368