【每日刷题3.18】2道算法+1道真题+10道面试 - 阿V

经过昨天网易的笔试,光刷算法不太够用,还要涉及程序题,今天阿里笔试加油。笔试都是ACM模式,我现在练习也只用ACM模式。

算法题(牛客网)

1.  矩阵的最小路径和

一开始我用深度遍历搜索,将所有可能的路径和都遍历一遍,发现不行,看了题解才发现要使用动态规划。


代码详情(ACM模式):

#include <iostream>
#include <vector>
using namespace std;

class Solution {
public:
	int minPathSum(vector<vector<int>>& matrix) {
		int n = matrix.size(), m = matrix[0].size();

		for (int i = 1; i < n; ++i) { //初始化最左边一列
			matrix[i][0] += matrix[i - 1][0];
		}
		for (int i = 1; i < m; ++i) { //初始化最上面一行
			matrix[0][i] += matrix[0][i - 1];
		}

		for (int i = 1; i < n; ++i) { //动态规划
			for (int j = 1; j < m; ++j) {
				matrix[i][j] = min(matrix[i - 1][j], matrix[i][j - 1]) + matrix[i][j];
			}
		}

		return matrix[n - 1][m - 1];
	}

};


/*
输入格式:
4 4
1 3 5 9
8 1 3 4
5 0 6 1
8 8 4 0
*/
int main() {
	int T = 1; //数据组数,有些题目会一口气给一堆数据
	for (int t = 0; t < T; ++t) {
		int n = 0, m = 0; //n*m矩阵
		cin >> n >> m;
		vector<vector<int>> matrix(n, vector<int>(m, 0)); //存储矩阵数据
		for (int i = 0; i < n; ++i) {
			for (int j = 0; j < m; ++j) {
				cin >> matrix[i][j]; //写入矩阵数据
			}
		}

		Solution sl;
		cout << sl.minPathSum(matrix);
	}


	return 0;
}

2. 表达式求值

看了题解,自己重新一点一点终于写出来了,先理解没有括号的算法,有括号的时候,将括号内的数提取出来,不就是没有括号的算法了嘛。


代码详情:

#include <iostream>
#include <vector>
#include <stack>
using namespace std;


class Solution {
public:
	int solve(string s) {
		int n = s.size();

		stack<int> sum; //和栈-存储每个数
		int sign = s[0] == '-' ? '-' : '+'; //记录符号
		int num = 0; //记录数
		for (int i = 0; i < n; ++i) {
			if (s[i] >= '0' && s[i] <= '9') {
				num = num * 10 + (s[i] - '0');
			}

			if (s[i] == '(') {
				int count = 1; //记录括号数
				int left = i; //记录左括号
				while (count > 0) { //获取括号内的数
					i++;
					if (s[i] == ')') count--;
					else if (s[i] == '(') count++;
				}

				num = solve(s.substr(left+1, i - left - 1)); //计算括号内的数
			}
			
			if (!(s[i] >= '0' && s[i] <= '9') || i == n-1) { //遇到符号或最后一个数,将数加入和栈
				if (sign == '-') sum.push(-num);
				else if (sign == '+') sum.push(num);
				else if (sign == '*') sum.top() *= num;

				sign = s[i]; //更新符号
				num = 0; //初始化数
			}
		}

		int res = 0; //记录最终答案
		while (!sum.empty()) { //求和
			res += sum.top();
			sum.pop();
		}

		return res;
	}
};


/*
输入格式:
6
1+2
1+5*2
2+3+6
5*2*2
1*(2+1)
(3+4)*(5+(2-3))

*/
int main() {
	int T = 1; //T组数据
	cin >> T;
	for (int t = 0; t < T; ++t) {
		string s; //输入字符串
		cin >> s;

		Solution sl;
		cout << sl.solve(s) << endl;
	}


	return 0;
}

 算法真题

1. 牛牛铺地毯

 发现规律就不难,跟普通的动态规划一样,不过是前三项相加。题目说结果模10007,还以为是最后一个才模,原来每一个都要模。


代码详情:

#include <iostream>
#include <vector>
using namespace std;

class Solution {
public:
	int solve(int n) {
		vector<int> dp(3, 0); //创建动态规划数组
		dp[0] = 1, dp[1] = 2, dp[2] = 4;
		if (n < 4) return dp[n - 1];

		for (int i = 3; i < n; ++i) {
			dp.push_back((dp[i - 1] + dp[i - 2] + dp[i - 3]) % 10007);
		}

		return dp[n - 1];
	}
};


/*
输入数据:
4
1
2
3
5

*/
int main() {
	int T = 0; //T组数据
	cin >> T;
	for (int t = 0; t < T; ++t) {
		int n = 0;
		cin >> n;

		Solution sl;
		cout << sl.solve(n) << endl;
	}


	return 0;
}

面试题

1. MVC框架

 什么是MVC?MVC分别是:Model(模型)、View(视图)和Controller(控制)。用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。

今天阿里笔试感觉很不错,500分能拿300分左右,有一道一题跟今天刷的第一题超级像,但它多了个向上移动,可惜没做出来。开心~,放个假,休息一波。

### 回答1: rufus-3.18.exe是一款常用的免费开源软件,主要用于制作启动盘。这个软件可以帮助我们将操作系统的安装文件写入U盘或其他可移动存储设备,从而将其转换为可供电脑启动使用的启动介质。 制作启动盘的过程非常简单,只需下载并运行rufus-3.18.exe文件,然后选择U盘设备,并选择要写入的操作系统镜像文件。接下来,设置盘符标签、文件系统类型和启动方式等相关属性,并点击"开始"按钮开始制作。整个制作过程要根据U盘的大小和系统镜像文件的大小而定,一般只需数分钟到十几分钟即可完成。 使用rufus-3.18.exe制作启动盘的好处在于其简洁易用的界面和高效的操作。这款软件支持多种操作系统的安装镜像,包括Windows、Linux和其他一些开源系统。同时,rufus-3.18.exe还提供了一些高级功能,如反复可靠的格式化、UEFI与BIOS两种启动模式的支持等。 值得一提的是,使用rufus-3.18.exe制作启动盘需要注意一些事项。首先,确保选择的操作系统镜像文件是合法的且可用的。其次,制作启动盘过程中会将U盘上的所有数据格式化,因此请提前备份好重要的文件。最后,如果在使用过程中遇到问题,可以通过rufus-3.18.exe官方网站或相关论坛寻求帮助。 总之,rufus-3.18.exe是一款方便实用的启动盘制作软件,它能够帮助我们快速准确地将操作系统镜像写入U盘,并在需要时进行电脑的启动安装。无论是安装新系统、修复故障还是进行系统维护,rufus-3.18.exe都是一个非常有用的工具。 ### 回答2: rufus-3.18.exe是一款常见的电脑软件。Rufus是一个用于制作可引导USB闪存驱动器和创建可引导U盘的工具。它支持多种操作系统的安装介质制作,包括Windows、Linux、FreeDOS等。通过使用rufus-3.18.exe,用户可以将ISO镜像文件写入U盘,从而用于系统安装、修复以及各种应急启动的需要。 Rufus具有简单易用的界面和强大的功能。用户只需将U盘插入计算机,运行rufus-3.18.exe,选择正确的设备和ISO镜像文件,然后点击启动按钮,即可开始制作可引导U盘。它采用了快速和可靠的数据写入算法,能够在较短的时间内完成制作过程。 此外,rufus-3.18.exe还提供了其他一些高级选项,如分区方案、文件系统选择、磁盘标签设置等。用户可以根据自己的需求进行个性化设置。它还允许用户对已有的U盘进行格式化、删除分区等操作,使得U盘的管理更加便捷。 总而言之,rufus-3.18.exe是一款功能强大且常用的软件工具,适用于各种各样的操作系统安装和系统维护需求。无论是普通用户还是专业人士,只要需要制作可引导U盘,都可以选择使用rufus-3.18.exe来完成。 ### 回答3: rufus-3.18.exe 是一个常见的电脑软件,它是用于制作启动盘的工具。制作启动盘是为了能够在计算机启动时加载操作系统或其他辅助工具。rufus-3.18.exe 可以将一个ISO镜像文件或其他类型的映像文件写入可启动的USB闪存驱动器或SD卡中。 使用 rufus-3.18.exe 制作启动盘非常简单。首先,需要插入一个空白的USB闪存驱动器或SD卡,然后运行 rufus-3.18.exe。在软件界面中,可以选择要写入的映像文件,并设置启动盘的文件系统类型和分区方案。之后,点击“开始”按钮,rufus-3.18.exe 将开始格式化选定的设备并将映像文件写入其中。大约几分钟后,制作好的启动盘就可以使用了。 制作启动盘有很多用途。例如,当我们需要重新安装操作系统、修复计算机故障或进行数据恢复时,可以使用启动盘。使用 rufus-3.18.exe 制作启动盘还可以帮助我们在一些计算机无法正常启动的情况下进行系统修复。通过插入启动盘,我们可以引导计算机进入预安装的操作系统或其他救援工具。 总之,rufus-3.18.exe 是一个方便实用的工具,可以帮助我们轻松制作启动盘。无论是在日常使用中还是在紧急情况下,制作启动盘都是一个有用的技能。使用 rufus-3.18.exe,我们可以轻松应对各种计算机问题,并为计算机的维护和修复提供了便利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZW游戏制造

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值