字节跳动开发方向笔试

1. 寻找循环最小子串

  1. 输入一个字符串,判断改字符串是否是完全循环,如果循环,则输出最短循环子串;反之输出自身;
  2. 循环:输入abababab,输出最短循环子串:ab
  3. 不循环:输入:abc,输出:abc

leetcode 459题

留着吃了饭写

2. 快速幂实现计算器

  1. 实现加法:1 2 +,输出:3
  2. 实现减法:1 2 -,输出:-1
  3. 实现乘法:1 3 *,输出:3
  4. 实现幂运算:2 3 ^,输出:8
    注:结果需要对1e9 + 7 取模

这个题主要就用快速幂实现幂运算,然后就是乘法可能会溢出,所以需要使用long long类型并进行取模:

快速幂
参考数值的整数次方

#include <iostream>
using namespace std;
const int M = 1e9 + 7;

// 定义加法运算 add
long long add(long long a, long long b) { return (a + b) % M; }
// 定义减法运算 sub
long long sub(long longa, long longb) { return (a - b) % M; }
// 定义乘法运算
long long mul(long long a, long long b) { return ((a % M) * (b % M)) % M; }
// 定义幂运算——快速幂
long long myPow(long long a, long long b){
	long long res = 1, tmp = a;
	while(b != 0){
		if((b & 1) != 0){
			res *= tmp;
			res %= M;
		}
		tmp *= tmp;
		tmp %= M;
		b >> 1;
	}
	return res;
}

int main(){
	int N;
	cin >> N;
	
	for(int i = 0; i < N; ++ i){
		int a, b;
		char opt;
		cin >> a >> b >> opt;
		// 题目好像是保证了输入合法,即操作只包括'+'、'-'、'*'、'^'
		if(opt == '+') cout << add(a, b) << endl;
		else if(opt == '-') cout << sub(a, b) << endl;
		else if(opt == '*') cout << mul(a, b) << endl;
		else cout << myPow(a, b) << endl;
	}
	return 0;
}

3. 计算曼哈顿距离的最小

  1. 输入:MN表示有M个人的坐标,N个车站的坐标;
  2. 接下来M行表示每个人的坐标(x, y),N行表示每个车站坐标(p_x, p_y);
  3. 每个车站与人的距离采用曼哈顿距离计算;
  4. 输出:距离所有人的距离最短的车站坐标(有重复的输出第一次出现的)

暴力法,超时

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

int main() {
	int n, m;
	cin >> n >> m;

	vector<vector<float> > people(n, vector<float>(2, 0));
	vector<vector<float> > station(m, vector<float>(2, 0));
	vector<float> res(m, 0);

	for (int i = 0; i < n; ++i) {
		float x, y;
		cin >> x >> y;
		people[i][0] = x, people[i][1] = y;
	}
	
	for (int j = 0; j < m; ++j) {
		float x, y;
		cin >> x >> y;
		station[j][0] = x, station[j][1] = y;
		for (int i = 0; i < n; ++i) {
			float xx = abs(x - people[i][0]);
			float yy = abs(y - people[i][1]);
			float dist = xx + yy;
			res[j] += dist;
		}
	}

	float min = INT_MAX;
	int index;
	for (int i = 0; i < res.size(); ++i) {
		if (res[i] < min) {
			index = i;
			min = res[i];
		}
	}
	cout << station[index][0] << " " << station[index][1] << endl;
	return 0;
}

4. 完美树

不是很懂题的意思 哈哈哈哈

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
字节跳动是一家中国的科技公司,总部位于北京,成立于2012年。它是一家以智能内容推荐算法为核心的技术公司,旗下拥有多个知名的移动应用,如抖音、今日头条等。 字节跳动的Java笔试题主要考察对Java编程语言的理解和应用能力。具体题目可能会涵盖Java基础知识、面向对象编程、多线程、集合框架等方面。 对于这样的笔试题,可以尝试以下思路进行回答: 1. 首先,对题目进行仔细阅读和理解。确保对题目要求有清晰的认识,明确自己需要实现的目标。 2. 根据题目要求,分析需要使用哪些Java的特性和知识来解决问题。例如,如果题目要求涉及到集合操作,可以选择合适的集合类和方法;如果题目涉及到多线程,可以使用线程类和相关同步机制。 3. 根据自己对问题的理解,进行算法设计和编码。可以使用IDE等开发工具进行编码和调试。 4. 在编码过程中,注意代码的规范性、可读性和可维护性,注重代码的复用和优化。 5. 完成编码后,进行测试和调试。使用不同的测试用例验证代码正确性,并修复可能出现的bug。可以使用调试工具帮助定位和解决问题。 6. 完成代码的编写和测试后,可以进行代码的优化和改进。例如,可以考虑使用更高效的算法、减少内存和时间消耗等。 最后,可以将自己的解决方案进行整理和总结,提炼出解题的关键思路和方法。这样能够进一步加深对Java编程语言的理解和应用能力。同时,也可以在面试过程中展示自己的编程能力和解决问题的思维模式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值