2023.9.23 小米 软件工程师 JS 方向笔试
1.矩阵求和
由于每次只会对行和列进行操作,因此我们可以分别记录最新的行操作,最新的列操作。
在累加计算答案的时候,每次比较一下行和列的操作哪一个是最新的即可。
long long martixsum(int n,vector<vector<int>>&op) { vector<pair<int,int>>col(n+1,{0,0}); vector<pair<int,int>>line(n+1,{0,0}); int t=1; for(auto c:op) { int type=c[0]; int index=c[1]; int val=c[2]; if(type==0) { col[index].first=val; col[index].second=t++; }else { line[index].first=val; line[index].second=t++; } } long long ans=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(col[i].second>line[j].second)ans+=col[i].first; else ans+=line[j].first; return ans; }
2.字符串翻转
模拟题,从左往右模拟反转即可,每次碰到的新的字符和当前字符不同,说明前缀需要翻转。
#include<bits/stdc++.h> using namespace std; int main() { string s;cin>>s; long long ans=0; for(int i=0;i+1<(int)s.size();i++)ans+=i+1; cout<<ans<<endl; return 0; }#小米##笔试#