返回信息流请我邮校友帮忙解解题,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]
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #98694同步于 2019/12/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
【问题】【求解算法题】某美资公司笔试题,谢谢
sdy8282
2019/12/2镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
第一题:dfs遍历一遍
第二题:滑动窗口,如果窗口内没包含所有景点则扩大窗口;如果所有景点都包含在窗口内则减少窗口,同时记录最小的窗口大小
第三题:从右向左遍历,如果是0则ans++,如果是1则ans += 2;注意遍历至最左端时的边界情况
谢谢解答, 身处制造业,这个还是有点不知道这么实现,惭愧,研究下,,
【 在 laplace 的大作中提到: 】
: 第一题:dfs遍历一遍
: 第二题:滑动窗口,如果窗口内没包含所有景点则扩大窗口;如果所有景点都包含在窗口内则减少窗口,同时记录最小的窗口大小
: 第三题:从右向左遍历,如果是0则ans++,如果是1则ans += 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;
}
}
谢谢,厉害了
【 在 a2012210456 的大作中提到: 】
: 第一题leetcode上的
: class Solution {
: void dfs(char[][] grid, int r, int c) {
: ...................
问一下第一题的思路,我的想法是这样的,把数组遍历一遍,当且仅当当前下标的值与上下左右都不一样时,sum也就是国家总数+1,其余情况sum都不变,这思路有问题吗,这样的空间复杂度会小一点?。
【 在 laplace (laplace) 的大作中提到: 】
: 第一题:dfs遍历一遍
: 第二题:滑动窗口,如果窗口内没包含所有景点则扩大窗口;如果所有景点都包含在窗口内则减少窗口,同时记录最小的窗口大小
: 第三题:从右向左遍历,如果是0则ans++,如果是1则ans += 2;注意遍历至最左端时的边界情况
答案不是字符串长度
答案是 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)了