【LeetCode】第283场周赛题解

本场题题目不难,但是力求写出精简优雅的代码,还是有需要学习的地方的。

第一题

力扣

 

class Solution:def cellsInRange(self, s: str) -> List[str]:ans = []a,b,c,d = s[0],s[1],s[3],s[4]for i in range(ord(a), ord(c)+1):for j in range(int(b),int(d)+1):ans.append(chr(i)+str(j))return ans

第二题:

力扣

AC代码:

class Solution {
public:long long calc(long long l, long long r) {if(l>r) return 0;return (l+r)*(r-l+1)/2;}long long minimalKSum(vector<int>& nums, int k) {sort(nums.begin(), nums.end());long long ans = 0;if(nums[0] - 1 >= k) {return calc(1, k);} else {ans += calc(1, nums[0]-1);k -= nums[0]-1;}for(int i = 1; i<nums.size(); i++) {if(nums[i] - nums[i-1] <=1) continue;if(nums[i] - nums[i-1] - 1 <= k) {k -= nums[i] - nums[i-1] - 1;ans += calc(nums[i-1]+1, nums[i]-1);} else {ans += calc(nums[i-1]+1, nums[i-1]+1+k-1);k = 0;break;}}if(k>0) {ans += calc(nums[nums.size()-1]+1, nums[nums.size()-1]+k);}return ans;}
};

AC代码2:(哨兵是个好东西)

class Solution {
public:long long calc(long long l, long long r) {if(l>r) return 0;return (l+r)*(r-l+1)/2;}long long minimalKSum(vector<int>& nums, int k) {nums.push_back(0);nums.push_back(int(1e9) + 5000000);sort(nums.begin(), nums.end());long long ans = 0;for(int i = 1; i<nums.size(); i++) {if(nums[i] - nums[i-1] <=1) continue;if(nums[i] - nums[i-1] - 1 <= k) {k -= nums[i] - nums[i-1] - 1;ans += calc(nums[i-1]+1, nums[i]-1);} else {ans += calc(nums[i-1]+1, nums[i-1]+1+k-1);k = 0;break;}}return ans;}
};

AC代码3:

只需要一次等差数列求和公式。先假设取1~K,其他时候遍历数组往后加就可以了。

第三题

力扣

解题报告:

我写的真的是垃圾代码, 首先最后一个for循环完全可以合并到第一个里面的。因为他是指针啊,只要new出来了,就算left和right是null也没关系的,直接修改就行。

并且,这题用python写是真的爽,dict能代替这里的一切。抽空改写成py。

而且其实这里用set也不是最优的,再加个vis数组不好吗?非要带个log。

不过我刚开始想的是直接把fa给改成map的,但是也不太容易写精简了,因为你要找出现过但没作为子节点出现的 那个节点。

AC代码:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int fa[100005];TreeNode* tr[100005];TreeNode* createBinaryTree(vector<vector<int>>& descriptions) {set<int> ss;for(int i = 0; i<descriptions.size(); i++) {int f = descriptions[i][0];int s = descriptions[i][1];fa[s] = f;ss.insert(s);ss.insert(f);if(tr[s] == nullptr) tr[s] = new TreeNode(s);if(tr[f] == nullptr) tr[f] = new TreeNode(f); }int root;for(auto x : ss) {if(fa[x] == 0) {root = x;break;}}for(int i = 0; i<descriptions.size(); i++) {int f = descriptions[i][0];int s = descriptions[i][1];if(descriptions[i][2] == 1) tr[f]->left = tr[s];else tr[f]->right = tr[s];}        return tr[root];}
};

第四题

力扣

 

 解题报告:

刚开始没看题,没看到要找相邻的两个“非互质数”。想了半天也凑出来了这个“升级版”题目的解法,一会说。

但是这题要是相邻的话,其实就简化很多了。

相邻的问题可以考虑栈做就行了。(就跟括号匹配之类的一样)

AC代码:

class Solution {
public:long long gcd(long long  a, long long b) {return b==0?a:gcd(b,a%b);}long long lcm(long long a, long long b) {return a*b/gcd(a,b);}vector<int> replaceNonCoprimes(vector<int>& nums) {stack<int> sk;sk.push(nums[0]);for(int i = 1; i<nums.size(); i++) {sk.push(nums[i]);int t1 = sk.top();sk.pop();int t2 = sk.top();sk.pop();int flag = 0;while(gcd(t1, t2) != 1) {sk.push(lcm(t1, t2));if(sk.size() <= 1) {flag = 1;break;}t1 = sk.top();sk.pop();t2 = sk.top();sk.pop();}if(flag == 0) {sk.push(t2);sk.push(t1);}}vector<int> ans;while(sk.size()) {int x = sk.top();ans.push_back(x);sk.pop();}reverse(ans.begin(), ans.end());return ans;}
};

这题1WA了因为sk.size()<=1的时候break了但是忘把取出来的元素再push进去了。

然后2WA是这么写的:其实是只改了再外面pop的情况。应该再想想,还有没有类似的情况会导致pop后忘记push。这样就会发现while里面也有。。然后就可以一次性改对了。

//2WA的部分代码for(int i = 1; i<nums.size(); i++) {sk.push(nums[i]);int t1 = sk.top();sk.pop();int t2 = sk.top();sk.pop();if(gcd(t1, t2) != 1) {while(gcd(t1, t2) != 1) {sk.push(int(lcm(t1, t2)));if(sk.size() <= 1) {break;}t1 = sk.top();sk.pop();t2 = sk.top();sk.pop();}} else {sk.push(t2);sk.push(t1);}}

这题也写丑了。对于stack的问题其实完全可以用vector去写的,这样一来最后不用出栈再reverse一遍,二来不用再繁琐的每次sk.top()sk.pop(),直接取v[v.size()-1]和v[v.size()-2]就行了,这样也不用if flag==0 再push进去了,真是太丑了。看看人家怎么写的。

class Solution {
public:int gcd(int x, int y) { return y ? gcd(y, x % y) : x; }vector<int> replaceNonCoprimes(vector<int>& nums) {int n = nums.size();vector<int> ans;for (int i = 0; i < n; ++i) {int t = nums[i];while (!ans.empty() && gcd(t, ans.back()) > 1) {t = t / gcd(t, ans.back()) * ans.back();ans.pop_back();}ans.push_back(t);}return ans;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linq to Sql : 三种事务处理方式

Linq to SQL支持三种事务处理模型&#xff1a;显式本地事务、显式可分发事务、隐式事务。(from MSDN: 事务 (LINQ to SQL))。MSDN中描述得相对比较粗狂&#xff0c;下面就结合实例来对此进行阐述。 0. 测试环境 OSWindows Server 2008 Enterprise sp1IDEVisual Studio 2008, …

【LeetCode - 33】搜索旋转排序数组(二分)

力扣 解题报告&#xff1a; 二分。但是有不少细节要考虑清楚。 所以干脆考虑另一种二分的方式。也就是第二次二分的时候&#xff0c;把两半数组给拼成一个完整的数组&#xff0c;当然下标需要是虚拟的&#xff0c;这一步可以用偏移量取模完成。这样就不需要考虑边界情况了。 …

SHAREPOINT - CAML列表查询

首先要了解的是CAML(Collaboration Application Markup Language)不仅仅是用在对列表、文档库的查询&#xff0c;字段的定义&#xff0c;站点定义等处处使用的都是CAML。 简单的提一下CAML列表查询相关知识&#xff0c;请注意CAML查询无论对于标签还是值均大小写敏感 CAML查询…

【LeetCode - 1765】. 地图中的最高点

力扣 解题报告&#xff1a; 多元BFS。 进阶一下&#xff1a; 二维数组&#xff0c;1表示等高线&#xff0c;0表示平地&#xff0c;比如 输入 010 111 010 输出 010 121 010输入 010 101 010 输出 010 111 010即输入一个二维地图&#xff0c;保证等高线一定是闭合的环&#x…

Linq找不到行或行已更改

1.debug确认&#xff0c;待修改记录已经正确定位&#xff0c;各字段均已正确赋值 2.最后发现原来是Linq使用的表实际中有个字段&#xff0c;数据库中为Nullable&#xff0c;而dbml是Not Nullable&#xff0c;二者不一致 一个逻辑是&#xff0c;我现在填写的是非空值&#xff…

【LeetCode - 32】最长有效括号

给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 示例 1&#xff1a; 输入&#xff1a;s "(()" 输出&#xff1a;2 解释&#xff1a;最长有效括号子串是 "()" 示例 2&#xff1a; 输入…

【转】微服务架构下分布式事务方案

1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务&#xff0c;这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇&#xff0c;很多互联网行业巨头、开源社区等都开始了微服务的讨论和实践。Hailo有160个不同服务构成…

【LeetCode - 443】压缩字符串(模拟)

解题报告&#xff1a; 直接模拟。 class Solution { public:int compress(vector<char>& chars) {int p 0;for(int i 0; i<chars.size();) {int j i1;while(j<chars.size() && chars[j] chars[i]) j;chars[p] chars[i];if(j-i > 1) {int cnt…

Linq to SQL之使用事务

事务是一个原子的工作单位&#xff0c;必须完整的完成单位里的所有工作&#xff0c;要么全部执行&#xff0c;要么全部都不执行。如果提交事务&#xff0c;则事务执行成功&#xff1b;如果回滚事务&#xff0c;则事务执行失败。 事务具备4个基本特性--ACID(原子性、一致性、孤立…

【LeetCode - 798】得分最高的最小轮调(转化法)

解题报告&#xff1a; 思路一&#xff1a;这题首先说一个nlogn的方法。 首先一个主客转化&#xff0c;题目描述是说把数组做翻转&#xff0c;idx不变&#xff0c;然后nums[i]和i作比较。那么我们可以转化为让数组不变&#xff0c;idx转变&#xff0c;即&#xff1a;假设刚开始…

【转】聊聊分布式事务,再说说解决方案

前言 最近很久没有写博客了&#xff0c;一方面是因为公司事情最近比较忙&#xff0c;另外一方面是因为在进行 CAP 的下一阶段的开发工作&#xff0c;不过目前已经告一段落了。 接下来还是开始我们今天的话题&#xff0c;说说分布式事务&#xff0c;或者说是我眼中的分布式事务…

【LeetCode - 2049】统计最高分的节点数目

解题报告&#xff1b; 直接dp。注意mx也得longlong AC代码&#xff1a; class Solution { public:vector<int> vv[200005];int sum[200005];long long ans[200005];int n;void dfs(int x) {ans[x] 1; sum[x] 1;for(int i 0; i<vv[x].size(); i) {dfs(vv[x][i]);s…

Web Service 实现分布式事务

首先要声明&#xff0c;不推荐在web service中实现分布式事务。 原因如下&#xff1a;   1、webservice在通信层上是一种无连接的协议&#xff0c;每两次调用之间&#xff0c;tcp连接是断开的。而分布式事务需要保存事务上下文&#xff0c;这是一个难点   2、web service是…

【LeetCode每日一题】2024. 考试的最大困扰度

​​​​​​力扣 解题报告&#xff1a; 因为只有T和F两个元素&#xff0c;不难证明单向性。尺取法解决。当然这题也可以二分。 AC代码&#xff1a; class Solution { public:int maxConsecutiveAnswers(string answerKey, int k) {int l 0, r 0;int T 0, F 0;int ans …

使用WebService如何实现分布式事务

在 System.EnterpriseServices 名称空间中实现了COM服务的相关类&#xff0c;其中就提供事务支持。 你可以在你的方法上加上TransactionAttribute特性标记&#xff0c;那个方法就支持事务了。 然后在那个方法中就可以用ContextUtil.SetComplete()和ContextUtil.SetAbort()方法分…

【Leetcode - 172】阶乘后的零(思维)

给定一个整数 n &#xff0c;返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;0 解释&#xff1a;3! 6 &#xff0c;不含尾随 0 示例 2&#xff1a; 输入&#xff1a;n 5 输出&…

linq、lambda、entity framework之间的关系

lambda&#xff1a; 一种匿名委托的精简版写法&#xff0c;明显的标志是>符号 entity framework&#xff08;简称EF&#xff09;&#xff1a; 微软访问数据库的最快捷最成熟的框架&#xff08;ORM&#xff09;&#xff0c;在EF出现以前有SqlHelper、NHibernate等访问数据库…

2022-08-20-网易笔试题

写在前面 题目收集来源自网络&#xff0c;前四题是开发岗的&#xff0c;后四题是算法岗的&#xff0c;因为代码无处提交&#xff0c;不一定正确&#xff0c;就不贴出来了&#xff0c;这里只写一下我的思路吧~欢迎大家一起讨论~~ 1、 思路&#xff1a;因为最大1e9&#xff0c…

TUN/TAP设备浅析(一) -- 原理浅析

TUN/TAP设备浅析 TUN设备 TUN 设备是一种虚拟网络设备&#xff0c;通过此设备&#xff0c;程序可以方便地模拟网络行为。TUN 模拟的是一个三层设备,也就是说,通过它可以处理来自网络层的数据&#xff0c;更通俗一点的说&#xff0c;通过它&#xff0c;我们可以处理 IP 数据包…

2022-08-21 星环科技-C++开发笔试

1、 思路&#xff1a;拓扑排序&#xff0c;不解释了 2、 思路&#xff1a; 本来以为他是一个图论问题&#xff0c;找最大环。 但其实对于这种情况&#xff0c;他是要输出0的&#xff0c;而不是9&#xff0c;所以他不是一个图论问题&#xff0c;他带有顺序性&#xff0c;这种可…