BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #98694同步于 2019/12/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

【问题】【求解算法题】某美资公司笔试题,谢谢

sdy8282
2019/12/2镜像同步9 回复
请我邮校友帮忙解解题,java /python都行 一、任务描述: 横竖线划分的矩形地图--即:二维固定大小数组: 1. 数组的值对应地图颜色值 2. 相同颜色,且相连的区域,认为属于同一个国家 3. 所谓相连,即,从当前位置,经:上/下/左/右 移动一步后的区域 4. 不相连区域,即使颜色相同也不属于同一个国家 求: 国家数目 二、任务描述: 跟团旅游,旅游团的行程已确定,如:当天到之后一年内,每天要去哪个景点的ID都已明确,且: 1. 日期从0开始编好 2. 每天只去某一个景点 3. 相同景点会重复去 输入为一个数组: 日期对应数组下标:0 1 2 3 4 5 6 ... 景点ID对应数组值:1 2 3 1 8 2 9 ... 其中3, 5日对应的景点ID 1, 2分别与0, 1日相同,这就是:“相同景点会重复去” 求: 加入旅游团的日期,使:只要经过最少的天数,就能玩遍所有景点 三、任务就是: 求一个数,给的是二进制字符串表示,如果是奇数就-1,偶数就除2,一直到0,计算要几步操作 谢谢[em41]
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
laplace机器人#1 · 2019/12/2
第一题:dfs遍历一遍 第二题:滑动窗口,如果窗口内没包含所有景点则扩大窗口;如果所有景点都包含在窗口内则减少窗口,同时记录最小的窗口大小 第三题:从右向左遍历,如果是0则ans++,如果是1则ans += 2;注意遍历至最左端时的边界情况
sdy8282机器人#2 · 2019/12/2
谢谢解答, 身处制造业,这个还是有点不知道这么实现,惭愧,研究下,, 【 在 laplace 的大作中提到: 】 : 第一题:dfs遍历一遍 : 第二题:滑动窗口,如果窗口内没包含所有景点则扩大窗口;如果所有景点都包含在窗口内则减少窗口,同时记录最小的窗口大小 : 第三题:从右向左遍历,如果是0则ans++,如果是1则ans += 2;注意遍历至最左端时的边界情况
nanguohao机器人#3 · 2019/12/2
一楼太厉害了
a2012210456机器人#4 · 2019/12/2
第一题leetcode上的 class Solution { void dfs(char[][] grid, int r, int c) { int nr = grid.length; int nc = grid[0].length; if (r < 0 || c < 0 || r >= nr || c >= nc || grid[r][c] == '0') { return; } grid[r][c] = '0'; dfs(grid, r - 1, c); dfs(grid, r + 1, c); dfs(grid, r, c - 1); dfs(grid, r, c + 1); } public int numIslands(char[][] grid) { if (grid == null || grid.length == 0) { return 0; } int nr = grid.length; int nc = grid[0].length; int num_islands = 0; for (int r = 0; r < nr; ++r) { for (int c = 0; c < nc; ++c) { if (grid[r][c] == '1') { ++num_islands; dfs(grid, r, c); } } } return num_islands; } }
sdy8282机器人#5 · 2019/12/3
谢谢,厉害了 【 在 a2012210456 的大作中提到: 】 : 第一题leetcode上的 : class Solution { : void dfs(char[][] grid, int r, int c) { : ...................
Lostone机器人#6 · 2019/12/5
问一下第一题的思路,我的想法是这样的,把数组遍历一遍,当且仅当当前下标的值与上下左右都不一样时,sum也就是国家总数+1,其余情况sum都不变,这思路有问题吗,这样的空间复杂度会小一点?。 【 在 laplace (laplace) 的大作中提到: 】 : 第一题:dfs遍历一遍 : 第二题:滑动窗口,如果窗口内没包含所有景点则扩大窗口;如果所有景点都包含在窗口内则减少窗口,同时记录最小的窗口大小 : 第三题:从右向左遍历,如果是0则ans++,如果是1则ans += 2;注意遍历至最左端时的边界情况
laplace机器人#7 · 2019/12/6
思路不太对,试试这个测试用例: [[0, 0, 0] [0, 1, 1] [1, 1, 1]] 找不到一个点与上下左右都不一样
xxpxxxxp机器人#8 · 2019/12/6
第一题DFS或者DSU都可解,easy难度 第二题滑窗,medium难度 第三题,答案就是字符串长度?模拟的话O(n),想清楚之后就是O(1)了
rancho机器人#9 · 2019/12/13
答案不是字符串长度 答案是 0的个数+1的个数*2- 1 (字符串长度 + 1的个数 - 1) 我们规定一个 n 位二进制数退化成 n -1 位二进制数的方法: 如果末尾为0,右移(1步) 如果末尾为1,减1,右移(2步) 例如 100101 需要退化成 10010,需要先减1再右移 例如 110100 需要退化成 10010,需要右移 0 不需要退化,最后-1 所以答案就是 0的个数+1的个数*2 - 1 【 在 xxpxxxxp 的大作中提到: 】 : 第一题DFS或者DSU都可解,easy难度 : 第二题滑窗,medium难度 : 第三题,答案就是字符串长度?模拟的话O(n),想清楚之后就是O(1)了