【网易Java程序员两轮面试,这些问题你能答对几个?】教程文章相关的互联网学习教程文章

程序员面试金典 - 面试题 08.02. 迷路的机器人(DFS/动态规划)【代码】【图】

文章目录1. 题目2. 解题2.1 DFS2.2 动态规划 1. 题目 设想有个机器人坐在一个网格的左上角,网格 r 行 c 列。 机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍物)。 设计一种算法,寻找机器人从左上角移动到右下角的路径。网格中的障碍物和空位置分别用 1 和 0 来表示。 返回一条可行的路径,路径由经过的网格的行号和列号组成。左上角为 0 行 0 列。 示例 1: 输入: [[0,0,0],[0,1,0],[0,0,0] ] 输出: [[0,0],[0,1...

程序员面试金典 - 面试题 08.14. 布尔运算(区间动态规划)【代码】

1. 题目 给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成。 实现一个函数,算出有几种可使该表达式得出 result 值的括号方法。 示例 1: 输入: s = "1^0|0|1", result = 0 输出: 2 解释: 两种可能的括号方法是 1^(0|(0|1)) 1^((0|0)|1)示例 2: 输入: s = "0&0&0&1^1|0", result = 1 输出: 10提示: 运算符的数量不超过 19 个来源:力扣(LeetCode) 链接:...

程序员面试金典 - 面试题 08.13. 堆箱子(DP)【代码】

1. 题目 堆箱子。给你一堆n个箱子,箱子宽 wi、深 di、高 hi。 箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子。 实现一种方法,搭出最高的一堆箱子。箱堆的高度为每个箱子高度的总和。 输入使用数组[wi, di, hi]表示每个箱子。示例1:输入:box = [[1, 1, 1], [2, 2, 2], [3, 3, 3]]输出:6示例2:输入:box = [[1, 1, 1], [2, 3, 4], [2, 6, 7], [3, 4, 5]]输出:10提示: 箱子的数目不大于3000个。来...

程序员面试金典 - 面试题 17.24. 最大子矩阵(转成一维最大子序和 DP)【代码】

文章目录1. 题目2. 解题2.1 前缀和(超时)2.2 动态规划 1. 题目 给定一个正整数和负整数组成的 N M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。 若有多个满足条件的子矩阵,返回任意一个均可。 示例: 输入: [[-1,0],[0,-1] ] 输出: [0,1,0,1]说明: 1 <= matrix.length, matrix[0].length <= 200来源:力扣(...

程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)【代码】【图】

1. 题目 给定一个方阵,其中每个单元(像素)非黑即白。 设计一个算法,找出 4 条边皆为黑色像素的最大子方阵。 返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和列号,size 是子方阵的边长。 若有多个满足条件的子方阵,返回 r 最小的,若 r 相同,返回 c 最小的子方阵。 若无满足条件的子方阵,返回空数组。matrix.length == matrix[0].length <= 200 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/p...

程序员面试金典 - 面试题 16.22. 兰顿蚂蚁(deque模拟)【代码】【图】

1. 题目 一只蚂蚁坐在由白色和黑色方格构成的无限网格上。 开始时,网格全白,蚂蚁面向右侧。 每行走一步,蚂蚁执行以下操作。(1) 如果在白色方格上,则翻转方格的颜色,向右(顺时针)转 90 度,并向前移动一个单位。 (2) 如果在黑色方格上,则翻转方格的颜色,向左(逆时针方向)转 90 度,并向前移动一个单位。编写程序来模拟蚂蚁执行的前 K 个动作,并返回最终的网格。 网格由数组表示,每个元素是一个字符串,代表网格中的一行, ...

程序员面试金典 - 面试题 17.13. 恢复空格(DP+Trie树)【代码】

文章目录1. 题目2. 解题2.1 动态规划2.2 Trie树 1. 题目 哦,不!你不小心把一个长篇文章中的空格、标点都删掉了,并且大写也弄成了小写。 像句子"I reset the computer. It still didn’t boot!"已经变成了"iresetthecomputeritstilldidntboot"。 在处理标点符号和大小写之前,你得先把它断成词语。 当然了,你有一本厚厚的词典dictionary,不过,有些词没在词典里。 假设文章用sentence表示,设计一个算法,把文章断开,要求未识...

程序员面试金典 - 面试题 16.03. 交点(数学)【代码】

1. 题目 给定两条线段(表示为起点start = {X1, Y1}和终点end = {X2, Y2}),如果它们有交点,请计算其交点,没有交点则返回空值。 要求浮点型误差不超过10^-6。若有多个交点(线段重叠)则返回 X 值最小的点,X 坐标相同则返回 Y 值最小的点。 示例 1: 输入: line1 = {0, 0}, {1, 0} line2 = {1, 1}, {0, -1} 输出: {0.5, 0}示例 2: 输入: line1 = {0, 0}, {3, 3} line2 = {1, 1}, {2, 2} 输出: {1, 1}示例 3: 输入: line...

程序员面试金典 - 面试题 16.13. 平分正方形(数学)【代码】

1. 题目 给定两个正方形及一个二维平面。请找出将这两个正方形分割成两半的一条直线。 假设正方形顶边和底边与 x 轴平行。 每个正方形的数据square包含3个数值,正方形的左下顶点坐标[X,Y] = [square[0],square[1]],以及正方形的边长square[2]。 所求直线穿过两个正方形会形成4个交点,请返回4个交点形成线段的两端点坐标(两个端点即为4个交点中距离最远的2个点,这2个点所连成的线段一定会穿过另外2个交点)。 2个端点坐标[X1,Y...

程序员面试金典 - 面试题 17.08. 马戏团人塔(最长上升子序 DP/二分查找)【代码】

文章目录1. 题目2. 解题2.1 超时解2.2 二分查找 1. 题目 有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上。出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一点。 已知马戏团每个人的身高和体重,请编写代码计算叠罗汉最多能叠几个人。 示例: 输入:height = [65,70,56,75,60,68] weight = [100,150,90,190,95,110] 输出:6 解释:从上往下数,叠罗汉最多能叠 6 层:(56,90), (60,95), (65,100), (68,1...

程序员面试金典 - 面试题 10.03. 搜索旋转数组(二分查找)【代码】

1. 题目 搜索旋转数组。给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详。 请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的。若有多个相同元素,返回索引值最小的一个。 示例1:输入: arr = [15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14], target = 5输出: 8(元素5在该数组中的索引)示例2:输入:arr = [15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14], target = 11输出:-1 (没有找到...

程序员面试金典 - 面试题 16.21. 交换和(哈希set)【代码】

1. 题目 给定两个整数数组,请交换一对数值(每个数组中取一个数值),使得两个数组所有元素的和相等。 返回一个数组,第一个元素是第一个数组中要交换的元素,第二个元素是第二个数组中要交换的元素。 若有多个答案,返回任意一个均可。若无满足条件的数值,返回空数组。 示例: 输入: array1 = [4, 1, 2, 1, 1, 2], array2 = [3, 6, 3, 3] 输出: [1, 3]示例: 输入: array1 = [1, 2, 3], array2 = [4, 5, 6] 输出: []提示: 1 <= a...

程序员面试金典 - 面试题 16.24. 数对和(双指针/哈希map)【代码】

文章目录1. 题目2. 解题2.1 排序+双指针2.2 哈希map 1. 题目 设计一个算法,找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。 示例 1: 输入: nums = [5,6,5], target = 11 输出: [[5,6]]示例 2: 输入: nums = [5,6,5,6], target = 11 输出: [[5,6],[5,6]]提示: nums.length <= 100000来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/pairs-with-sum-lcci 著作权归领扣网络所有。商业转载请联系...

程序员面试金典 - 面试题 10.02. 变位词组(哈希map)【代码】【图】

1. 题目 编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。 变位词是指字母相同,但排列不同的字符串。 示例: 输入: ["eat", "tea", "tan", "ate", "nat", "bat"], 输出: [["ate","eat","tea"],["nat","tan"],["bat"] ]说明: 所有输入均为小写字母。 不考虑答案输出的顺序。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/group-anagrams-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商...

程序员面试金典 - 面试题 10.11. 峰与谷(排序/不排序)【代码】【图】

1. 题目 在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。 例如,在数组{5, 8, 2, 6, 3, 4, 3}中,{8, 6}是峰, {3, 2}是谷。 现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。 示例: 输入: [5, 3, 1, 2, 3] 输出: [5, 1, 3, 2, 3]提示: nums.length <= 10000来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/peaks-and-valleys-lcci 著作权归领扣网络所...