2021-07-11

2021-07-11

算法:

放在实验室,明天上传

第五十六场双周赛

一共有四道题

  • 统计平方和三元组的数目
  • 迷宫中离入口最近的出口
  • 求和游戏
  • 规定时间内到达终点的最小花费

1、统计平方和三元组的数目

一个 平方和三元组 (a,b,c) 指的是满足 a2 + b2 = c2 的 整数 三元组 a,b 和 c 。

给你一个整数 n ,请你返回满足 1 <= a, b, c <= n 的 平方和三元组 的数目。

示例 1:

输入:n = 5
输出:2
解释:平方和三元组为 (3,4,5) 和 (4,3,5) 。
示例 2:

输入:n = 10
输出:4
解释:平方和三元组为 (3,4,5),(4,3,5),(6,8,10) 和 (8,6,10) 。

提示:

1 <= n <= 250

本题只需要枚举就行了

class Solution {
    public int countTriples(int n) {
        int cnt = 0;
		for(int i = 1; i < n;i++) {
			for(int j = i + 1; j < n;j++) {
				for(int k = j + 1;k <= n;k++) {
					if(i*i + j*j == k*k) {
						cnt++;
					}
				}
			}
		}
        return cnt*2;
    }
}

2、迷宫中离入口最近的出口

给你一个 m x n 的迷宫矩阵 maze下标从 0 开始),矩阵中有空格子(用 '.' 表示)和墙(用 '+' 表示)。同时给你迷宫的入口 entrance ,用 entrance = [entrancerow, entrancecol] 表示你一开始所在格子的行和列。

每一步操作,你可以往 或者 移动一个格子。你不能进入墙所在的格子,你也不能离开迷宫。你的目标是找到离 entrance 最近 的出口。出口 的含义是 maze 边界 上的 空格子entrance 格子 不算 出口。

请你返回从 entrance 到最近出口的最短路径的 步数 ,如果不存在这样的路径,请你返回 -1

示例 1:

2021-07-11

输入:maze = [["+","+",".","+"],[".",".",".","+"],["+","+","+","."]], entrance = [1,2]
输出:1
解释:总共有 3 个出口,分别位于 (1,0),(0,2) 和 (2,3) 。
一开始,你在入口格子 (1,2) 处。
- 你可以往左移动 2 步到达 (1,0) 。
- 你可以往上移动 1 步到达 (0,2) 。
从入口处没法到达 (2,3) 。
所以,最近的出口是 (0,2) ,距离为 1 步。

示例 2:

2021-07-11

输入:maze = [["+","+","+"],[".",".","."],["+","+","+"]], entrance = [1,0]
输出:2
解释:迷宫中只有 1 个出口,在 (1,2) 处。
(1,0) 不算出口,因为它是入口格子。
初始时,你在入口与格子 (1,0) 处。
- 你可以往右移动 2 步到达 (1,2) 处。
所以,最近的出口为 (1,2) ,距离为 2 步。

示例 3:

2021-07-11

输入:maze = [[".","+"]], entrance = [0,0]
输出:-1
解释:这个迷宫中没有出口。

提示:

  • maze.length == m
  • maze[i].length == n
  • 1 <= m, n <= 100
  • maze[i][j] 要么是 '.' ,要么是 '+'
  • entrance.length == 2
  • 0 <= entrancerow < m
  • 0 <= entrancecol < n
  • entrance 一定是空格子。

一个常规的模板题(虽然我做了半个小时。。。)

class Solution {
    int[] station_x = {1,0,-1,0};
	int[] station_y = {0,-1,0,1};
	Queue<Pos> que = new LinkedList();
	int N = 105;
	char[][] a ;
	public int nearestExit(char[][] maze, int[] entrance) {
		a = maze;
		bfs(entrance[0],entrance[1]);
		if(q == Integer.MAX_VALUE) return -1;
		else
			return q;
    }
	int q = Integer.MAX_VALUE;
	public  void bfs(int x,int y) {
		que.add(new Pos(x,y,0));
		a[x][y] = '+';
		int tx,ty,tstep;
		int step = 0;
		while(!que.isEmpty()) {
			x = que.peek().x;
			y = que.peek().y;
			step = que.peek().step;
			que.poll();
			for(int i = 0; i < 4;i++) {
				tx = x + station_x[i];
				ty = y + station_y[i];
				tstep = step + 1;
				if(tx < 0 || ty < 0 || tx >= a.length || ty >= a[0].length)
					continue;
				if(a[tx][ty] == '+')
					continue;
				if((tx == 0 || tx == a.length - 1) && ty >= 0 && ty < a[0].length && a[tx][ty] == '.') {
					q = Math.min(q, tstep);
					continue;
				}
				if((ty == 0 || ty == a[0].length - 1) && tx >= 0 && tx < a.length && a[tx][ty] == '.') {
					q = Math.min(q, tstep);
					continue;
				}
				a[tx][ty] = '+';
				que.add(new Pos(tx,ty,tstep));
			}
			
		}
		
	}
}
class Pos{
	int x;
	int y;
	int step;
	public Pos(int x,int y,int step) {
		this.x = x;
	    this.y = y;
	    this.step = step;
	}
}

3、求和游戏(不用说,还不会做)

4、规定时间内到达终点的最小花费(不用说,还不会做)

springboot+vue

这周稍微学习了如何构建一个框架

由于图片原因,导致写到博客的图片都上传不上去。。。有时间再上传把

上一篇:详解Linux查看实时网卡流量的几种方式(转)


下一篇:【例题1】走迷宫图