字节的一道笔试题,不知道怎么做
大概就是给一行字符串,每三个一组,中间用空格分开,每个字符在0-9之间。
求包含0-9所有数字需要最少的组数。
测试用例:
"000 111 222 345 678 891" output: 5
"000 000 000 123 456 789" output: 4
求包含0-9所有数字需要最少的组数。
测试用例:
"000 111 222 345 678 891" output: 5
"000 000 000 123 456 789" output: 4
全部评论

闲的没事给你写一下,复杂度n*2^10,类似状压dp,
话说这种一般数据比较小吧,直接给面试官写个dfs应该就行。
#include <bits/stdc++.h>
// 相当于或起来全是1也就等于1024 - 1
int dp[1024];//dp[i] 凑出i的最小次数
int main() {
int n;
for (int i = 1; i <= 1023; i++) dp[i] = 100;// 初始化最大
dp[0] = 0; //啥也不选次数是0
std::vector<std::string> s = {"000", "000", "000", "123", "456", "789"};
//s = {"000", "111", "222", "345", "678", "891"};
for (auto e : s) {
int ans = 0;
for (int i = 0; i < 3; i++) {
ans |= (1 << (e[i] - '0'));
}
for (int i = 0; i <= 1023; i++) {
int x = i | ans;
dp[x] = std::min(dp[x], dp[i] + 1);
}
std::cout << ans << std::endl;
}
std::cout << dp[1023] << std::endl;
return 0;
}
哪个部门的啊
双指针或者二分
相关推荐
07-28 16:17
天津大学 硬件开发 点赞 评论 收藏
分享
07-10 17:26
南京工业职业技术大学 机械设计/制造 
点赞 评论 收藏
分享
07-31 18:13
门头沟学院 Java 点赞 评论 收藏
分享