avatar
文章
169
标签
38
分类
4

首页
归档
标签
分类
面试资料
首页
归档
标签
分类

面试资料

电话号码的字母组合
发表于2025-02-01|算法leetcode
电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 12输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"] 示例 2: 12输入:digits = ""输出:[] 示例 3: 12输入:digits = "2"输出:["a","b","c"] 提示: 0 <= digits.length <= 4 digits[i] 是范围 ['2', '9'] 的一个数字。 从选哪个的视角来看 1234567891011121 ...
子集
发表于2025-02-01|算法leetcode
子集给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集 (幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 12输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] 示例 2: 12输入:nums = [0]输出:[[],[0]] 提示: 1 <= nums.length <= 10 -10 <= nums[i] <= 10 nums 中的所有元素 互不相同 从nums[i]选还是不选这个角度分析。每一个数都有两种情况,选或不选,所以要把这两种情况都考虑进去。 12345678910111213141516171819202122232425class Solution { // nums[i]选或不选 List<List<Integer>> res = new ArrayList<>(); List<Integer> list = new ...
全排列
发表于2025-02-01|算法leetcode
全排列给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 12输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2: 12输入:nums = [0,1]输出:[[0,1],[1,0]] 示例 3: 12输入:nums = [1]输出:[[1]] 提示: 1 <= nums.length <= 6 -10 <= nums[i] <= 10 nums 中的所有整数 互不相同 从答案的视角看这道题,- - - 答案有三个槽位,在这三个槽位上填上三个不同的数。 固定一个槽位,深搜下一个槽位,回来之后再换一个数固定继续深搜,由于三个数不能相同,所以需要一个数组判断该数是否被使用过。 123456789101112131415161718192021222324252627class Solution { List<List<Integer>> res = new Ar ...
计网操作系统
发表于2025-01-31|八股文
计网操作系统计网计网基础知识1.解释一下IP地址、子网掩码、网络地址。IP 地址IP地址是用来唯一标识互联网上每台设备的数字地址。IPv4地址是一个32位的二进制数,通常表示为四个十进制数(每个数在0到255之间),中间用点号分隔开,如192.168.1.1。而IPv6地址则是一个128位的二进制数,通常表示为八组四位十六进制数,中间用冒号分隔,例如2001:0db8:85a3:0000:0000:8a2e:0370:7334。 子网掩码子网掩码用于确定IP地址中的哪部分代表网络地址,哪部分代表主机地址。通过与IP地址进行按位与运算,子网掩码可以帮助计算出设备所属的具体子网。对于IPv4,子网掩码也是一个32位的二进制数,通常以点分十进制形式表示,例如255.255.255.0。不同的子网掩码可以创建不同大小的子网。 网络地址IP地址和子网掩码进行按位与(bitwise AND)运算可以得到网络地址,也就是该IP地址所在的网络部分。 2.如何在Linux上配置一个IP地址,如果给定端口号如何解析出域名? 配置Linux系统的IP地址的方法,主要有以下三种: -ifconfig ifco ...
设计模式
发表于2025-01-31|八股文
设计模式1.单一职责原则单一职责原则:一个类或者模块只负责完成一个职责(或者功能) 一个类只负责完成一个职责或者功能。也就是说,不要设计大而全的类,要设计粒度小、功能单一的类。换个角度来讲就是,一个类包含了两个或者两个以上业务不相干的功能,那我们就说它职责不够单一,应该将它拆分成多个功能更加单一、粒度更细的类。 评价一个类的职责是否足够单一,我们并没有一个非常明确的、可以量化的标准,可以说,这是件非常主观、仁者见仁智者见智的事情。实际上,在真正的软件开发中,我们也没必要过于未雨绸缪,过度设计。所以, 我们可以先写一个粗粒度的类,满足业务需求。随着业务的发展,如果粗粒度的类越来越庞大,代码越来越多,这个时候,我们就可以将这个粗粒度的类,拆分成几个更细粒度的类。这就是所谓的持续重构(后面的章节中我们会讲到)。 2.开闭原则“对扩展开放、对修改关闭”。添加一个新的功能应该是,在已有代码基础上扩展代码(新增模块、类、方法等),而非修改已有代码(修改模块、类、方法等)。 怎么实现“对扩展开放、对修改关闭”? 在写代码的时候后,我们要多花点时间往前多思考一下,这段代码未来可能有哪些需求变更、如何设 ...
分布式
发表于2025-01-31|八股文
分布式1.分布式理论1.CAP 理论1.什么时候CAP?CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。 在理论计算机科学中,CAP 定理(CAP theorem)指出对于一个分布式系统来说,当设计读写操作时,只能同时满足以下三点中的两个: 一致性(Consistency)是指更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致(强一致性),不能存在中间状态。 可用性(Availability) 是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。 分区容错性(Partition tolerance) 是指分布式系统在遇到任何网络分区故障时,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。 2.为什么分布式系统中无法同时保证一致性和可用性?首先一个前提,对于分布式系统而言,分区容错性是一个最基本的要求,因此基本上我们在设计分布式系统的时候只能从一致性(C)和可用性(A)之间进行取 ...
JVM
发表于2025-01-31|八股文
JVM1.new一个对象到销毁的过程/java对象创建过程?在Java中,从创建(new)一个对象到销毁的过程大致可以分为以下几个步骤: 检查类是否加载:对象的实际创建是通过new关键字实现的。当JVM遇到new关键字时,会检查类是否已经加载到运行时数据区的方法区,如果没有,则先进行类的加载和初始化。 分配内存空间:当使用new关键字创建一个对象时,JVM会在运行时数据区的堆中为该对象分配相应的内存空间。 初始化对象:JVM会调用相应的构造方法来初始化对象,给对象的成员变量赋予初始值。 使用对象:在程序运行过程中,可以通过对象引用来访问和操作对象的成员变量和方法。 对象不再被引用:当对象不再被任何变量或数据结构引用时,它就成为垃圾对象,等待垃圾回收器进行回收。 垃圾回收:JVM的垃圾回收器会定期检查堆内存中的垃圾对象,并自动回收它们所占用的内存空间。垃圾回收的具体时机和策略取决于JVM的垃圾回收算法。 内存空间释放:当垃圾对象被回收后,它们占用的内存空间会被释放,以便重新分配给新创建的对象。 需要注意的是,JVM的垃圾回收机制会自动处理对象的销毁和内存空间的释放,程序员无 ...
实现Trie(前缀树)
发表于2025-01-31|算法leetcode
实现Trie(前缀树)**Trie**(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。 请你实现 Trie 类: Trie() 初始化前缀树对象。 void insert(String word) 向前缀树中插入字符串 word 。 boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。 boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true ;否则,返回 false 。 示例: 1234567891011121314输入["Trie", "insert", "search", "search", "startsWith", "insert", "sea ...
课程表
发表于2025-01-31|算法leetcode
课程表你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。 例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。 请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。 示例 1: 123输入:numCourses = 2, prerequisites = [[1,0]]输出:true解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0 。这是可能的。 示例 2: 123输入:numCourses = 2, prerequisites = [[1,0],[0,1]]输出:false解释:总共有 2 门课程。学习课程 1 之前,你需要先完成课程 0 ;并且学习课程 0 之前,你还应先完成课程 1 。这是不可能的。 提示: 1 <= numCour ...
腐烂的橘子
发表于2025-01-30|算法leetcode
腐烂的橘子在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。 示例 1: 12输入:grid = [[2,1,1],[1,1,0],[0,1,1]]输出:4 示例 2: 123输入:grid = [[2,1,1],[0,1,1],[1,0,1]]输出:-1解释:左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个方向上。 示例 3: 123输入:grid = [[0,2]]输出:0解释:因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0 。 提示: m == grid.length n == grid[i].length 1 <= m, n <= 10 grid[i][j] 仅为 0、1 或 2 橘子的腐烂过程是一个按层扩散的过程,所以可以用BFS解决。 初始化: 遍历整个网格 ...
1…456…17
avatar
范小勤
文章
169
标签
38
分类
4
Follow Me
公告
This is my Blog
最新文章
验证二叉搜索树2025-02-26
寻找重复数2025-02-17
下一个排列2025-02-17
颜色分类2025-02-16
只出现一次的数字2025-02-16
分类
  • 八股文11
  • 算法155
    • acwing22
    • leetcode133
标签
区间和 Trie 二叉树 模拟 完全背包 DFS 位运算 BFS 链表 优先队列 二叉搜索树 拓扑排序 哈希 01背包 栈 双向链表 差分 图论 摩尔投票 双指针 贪心 单调队列 桶排序 kmp 滑动窗口 并查集 前缀积 矩阵 递归 归并排序 单调栈 高精度 记忆化搜索 集合 二分 前缀和 动态规划 快速排序
归档
  • 二月 202543
  • 一月 202554
  • 十二月 202414
  • 九月 20241
  • 四月 202418
  • 三月 202419
  • 二月 202420
网站资讯
文章数目 :
169
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2025 By 范小勤
框架 Hexo|主题 Butterfly