AK 微众银行 9.3 笔试 Java后端方向

T1(模拟,二分)

  • (没看清买的糖果只有前缀,一开始用二分写了,后来意识到也没改了,简单写的话,直接模拟就好了)
#include <bits/stdc++.h>

#define endl '\n'

using namespace std;

const int N = 50010;

int n; int a[N];

bool check(int X) {
	unordered_map<int, int> cnt;
	for(int i = 1; i <= X; i ++) cnt[a[i]] ++ ;

	if(cnt.size() == X) return true;
	return false;
}

int main() {
	cin >> n;
	for(int i = 1; i <= n; i ++) cin >> a[i];

	int l = 1, r = n;
	while(l < r) {
		int mid = l + r + 1 >> 1;
		if(check(mid)) l = mid;
		else r = mid - 1;
	}

	cout << r << endl;
	return 0;
}

T2(思维,双指针)

#include <bits/stdc++.h>

#define endl '\n'

using namespace std;

typedef long long ll;

const int N = 50010;

int n; int a[N];

int main() {
	cin >> n;
	for(int i = 1; i <= n; i ++) cin >> a[i];
	sort(a + 1, a + n + 1);

	ll ans = 0, last = 0; for(int i = 1; i <= n; i ++) {
		int j = i; while(j <= n && a[j] == a[i]) j ++ ;
		int cnt = j - i; bool flag = false;
		if(last >= a[i]) ans += (last + 1 - a[i]) * 1ll * cnt, flag = true;
		ans += (cnt - 1) * 1ll * cnt / 2;
		if(flag) a[i] = last + 1; last = a[i] + cnt - 1; i = j - 1;
	}

	cout << ans << endl;
	return 0;
}

T3(模拟,前缀和)

  • 应该是数据出小了,按理不应该能直接过的,算是捡漏了吧 hh
#include <bits/stdc++.h>

#define endl '\n'

using namespace std;

typedef long long ll;

const int N = 100010;

int n, u, v; int a[N]; ll pre[N];

int main() {
	scanf("%d%d%d", &n, &u, &v);
	for(int i = 1; i <= n; i ++) scanf("%d", &a[i]);
	for(int i = 1; i <= n; i ++) pre[i] = pre[i - 1] + 0ll + a[i];

	int ans = 0;
	for(int len = v; len <= n; len += v) {
		for(int i = 1; i + len - 1 <= n; i ++) {
			if((pre[i + len - 1] - pre[i - 1]) * 1ll * v == len * 1ll * u) ans ++ ;
		}
	}

	cout << ans << endl;
	return 0;
}
#笔试#
全部评论
第三题时间复杂度不对吧
点赞 回复 分享
发布于 2023-09-03 21:07 上海

相关推荐

点赞 评论 收藏
分享
机智的大学生这就开摆:有些地方描述有点儿空泛。传感器直接说清是哪款,要不然对方都不知道问啥。然后freertos那里的描述也是,加上freertos就实现了实时性吗?可以说基于freertos的调度,结合xxx优化/xxx技术实现了xxx检测的实时性。同时freertos也能实现异步io,也能实现灵活的并行架构和高并发。 检测时效性的问题要考虑哪里需要时效性,摔倒检测需要通过中断实现,至于温度这种大惯量就不需要,方案细节理清楚。然后freertos那里提升响应速度用的消息队列不是太合适,可以说是用的notify反正和消息队列差不多,或者说指针传参来优化消息队列的值传递进而提升线程间通信效率。 但凡是搞过开发的看一眼你的简历就知道有问题了,需要重新整理技术路线优化一下。首先搞清楚技术路线,描述好软硬框架,体现性能优化/低功耗等。例如后续针对xxx功能进行了xxx的优化,实现了xxx成果(这里可以展开描述你使用的工具链,你是用的串口调试助手还是RTT来打印日志,有没有用systemview来优化任务的优先级大小避免乱序调度,或者使用了Ozone调试定位问题等)。 描述问题上例如视觉项目那里,基于xxx通信接口编写xxx传感器的驱动,实现了xxx功能,并提供了xxx数据处理/稳定性/精确度/异步调用。或者也可以统一描述为基于xxx、xxx、xxx通讯协议编写xxx、xxx、xxx传感器的驱动。后续再单独给这些传感器的数据处理/优化等进行描述。 最重要的一点,实习栏太少了,五六个月不至于只干了这么点,把实习项目描述清楚,把自己会的不管有没有让你做都写进去。你写了实习这栏,内容就不能比剩下的两个项目差多少了。 最后就是看看岗位jd,跟着描述修改你的专业技能以及项目的描述,这样被回复的概率才大。 希望你早日找到理想工作!祝好
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务