for(int i=0;i<s.size();i++){
char c = s[i];
mp[c].push_back(i);
}
int ans = -1;
for(const auto &it:mp){
auto &v = it.second;
ans = max(ans,v.back()-v[0]-1);
}
return ans;
}
};
-
这两种操作其实都是取模操作,都有周期性,完全可以可以暴力枚举所有情况。
-
b是偶数的话只能变动奇数位的数字,否则还可以变动偶数位的数字,两层循环分别枚举就可以了。
-
小技巧,将s拼接成两份,然后截取子串就可以实现类似队列的循环操作。
-
枚举
-
时间复杂度: O ( S 2 ∗ D 2 ) O(S2*D2) O(S2∗D2)
class Solution {
public:
string findLexSmallestString(string s, int a, int b) {
int n = s.size();
string ans = s;
string t = s + s;
int g = gcd(n, b);
for (int i = 0; i < n; i += g) {
string p = t.substr(i, n);
for (int j = 0; j <= 9; ++j) {
int th = g % 2 == 0 ? 0 : 9; //
for (int k = 0; k <= th; ++k) {
string q§;
for (int t = 1; t < n; t += 2)
q[t] = ‘0’ + (q[t] - ‘0’ + a * j) % 10;
for (int t = 0; t < n; t += 2)
q[t] = ‘0’ + (q[t] - ‘0’ + a * k) % 10;
ans = min(ans, q);
}
}
}
return ans;
}
};
- BFS暴力+unordered_set去重
class Solution {
public:
string findLexSmallestString(string s, int a, int b) {
unordered_set vis;
vis.insert(s);
string ans = s;
queue q;
q.push(s);
int len = s.size();
while(!q.empty()){
string cur = q.front();
q.pop();
if(cur<ans) ans = cur;
string nxt = cur.substr(len-b,b)+cur.substr(0,len-b);
if(vis.find(nxt)==vis.end()){
vis.insert(nxt);
q.push(nxt);
}
for(int j=1;j<len;j+=2){
cur[j] = char((cur[j]-‘0’+a)%10+‘0’);
}
if(vis.find(cur)==vis.end()){
vis.insert(cur);
q.push(cur);
}
}
return ans;
}
};
这题的思维的跳跃点实际上是二维降成一维排序。
- 最长上升子序列和
class Solution {
public:
int bestTeamScore(vector& scores, vector& ages) {
int n = scores.size();
vector<pair<int,int>> v(n);
for(int i=0;i<n;i++){
v[i] = {ages[i],scores[i]};
}
sort(v.begin(),v.end());
vector f(n,0);
int ans = 0;
for(int i=0;i<n;i++){
f[i] = v[i].second;
for(int j=0;j<i;j++){
if(v[i].second>=v[j].second){
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/4015acaf48f8d7745f1a1207dad37fa5.jpeg)
最后
我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。
还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
RB-1713462734781)]
还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。
[外链图片转存中…(img-0mIotwhj-1713462734782)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!