Leetcode周赛283
Excel 表中某个范围内的单元格
thinking
模拟即可
solution
class Solution {
public:
vector<string> cellsInRange(string s) {
char left=s[0];
char right=s[3];
char l=s[1];
char r=s[4];
vector<string> ans;
for(;left<=right;++left){
for(char ll=l;ll<=r;++ll) {
string s="aa";
s[0]=left;
s[1]=ll;
ans.push_back(s);
}
}
return ans;
}
};
向数组中追加 K 个整数
thinking
区间之间使用等差公式
solution
class Solution {
public:
long long minimalKSum(vector<int>& nums, int k) {
long long ans=0;int n=nums.size();
sort(nums.begin(),nums.end());
long long left=1;
if(nums[0]!=1) {
ans+=1;
--k;
}
long long kk=k;
for(int i=0;i<n&&k;++i) {
long long right=nums[i];
int cnt=right-left-1;
if(cnt>0) {
if(cnt<=kk) {//k够用
kk-=cnt;
ans+=(left+right)*(right-left+1)/2-left-right;
}else {//k不够用
ans+=kk*left+(kk+1)*kk/2;
kk=0;
}
}
left=nums[i];
}
long long num=nums[n-1];
if(kk) ans+=kk*num+(kk+1)*kk/2;
return ans;
}
};
根据描述创建二叉树
thinking
给每个值设计节点,按照给定的数组建立指向关系即可
solution
class Solution {
public:
TreeNode* createBinaryTree(vector<vector<int>>& d) {
unordered_map<int,TreeNode*> a;
int ans=0;
for(auto val:d) {
if(!a.count(val[0])) {a[val[0]]=new TreeNode(val[0]);ans+=val[0];}
if(!a.count(val[1])) {a[val[1]]=new TreeNode(val[1]);ans+=val[1];}
}
for(auto val:d) {
if(val[2]) {//==1
a[val[0]]->left=a[val[1]];
} else {
a[val[0]]->right=a[val[1]];
}
ans-=val[1];
}
//cout<<ans;
return a[ans];
}
};
替换数组中的非互质数
thinking
使用栈进行模拟,我们将每一次进栈的元素与栈顶元素进行操作,进行合并。当遍历完数组时,栈内元素就是我们的答案。
solution
class Solution {
public:
vector<int> replaceNonCoprimes(vector<int>& nums) {
int n=nums.size();
vector<int> s={nums[0]};
for(int i=1;i<n;++i) {
s.push_back(nums[i]);
while(s.size()>1) {
int x=s.back();int y=s[s.size()-2];
int num=gcd(x,y);
if(num==1) break;
s.pop_back();
s.back()*=x/num;
}
}
return s;
}
};

浙公网安备 33010602011771号