卡码网用友提前批笔试 | 121 大数减法、122 滑动窗口最大值、117 软件架构

本文主要是介绍卡码网用友提前批笔试 | 121 大数减法、122 滑动窗口最大值、117 软件架构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

121 大数减法

一开始这么写,但是就是有90%的数据通过不了

#include <iostream>
#include <string>
using namespace std;void reverse(string& s,int l, int r) {while (l < r) {char c = s[l];s[l] = s[r];s[r] = c;l++; r--;}
}int main() {string a, b;cin >> a >> b;long long ai = stoi(a);long long bi = stoi(b);string s = "";long int res = ai - bi;int flag = res > 0 ? 1 : 0;if (!flag) res *= -1;while (res) {s += (res % 10 + '0');res /= 10;}reverse(s,0, s.size()-1);if (!flag) s = '-' + s;cout << s << endl;return 0;
}

后来知道会有很多数据甚至超过long long的范围,所以要用字符串模拟减法

代码如下:

#include <iostream>
#include <string>
using namespace std;int main() {string a, b;cin >> a >> b;string flag = "";if (a.size() < b.size()) {string t = a;a = b;b = t;flag = "-";}if (a.size() == b.size()) {for (int i = 0; i < a.size(); i++) {if (a[i] > b[i]) break;else if (a[i] == b[i]) continue;else {string t = a;a = b;b = t;flag = "-";break;}}   }string res = a;int j = a.size() - b.size();for (int i = j; i < a.size(); i++) {if (res[i] >= b[i-j]) res[i] = res[i] - b[i-j] + '0';else {int k = i - 1;while (res[k] < '1') {res[k] = '9'; k--;}res[k] = res[k] - 1;res[i] = (10 - (b[i-j] - res[i]) + '0');}}res = flag + res;cout << res << endl;return 0;
}

122 滑动窗口最大值

本来以为要用最大堆最小堆、优先队列的,但是时间复杂度刚好够用了。需要处理下字符串输入转化为整数数组,由于']'之后还有一个',',需要用一个flag记录状态的变化。其他思路就是一个双重循环控制边界的问题了,小心调试潜在的数组或指针越界的问题就ok了

代码如下:

#include <iostream>
#include <string>
#include <vector>
using namespace std;int main() {string s;getline(cin, s);vector<int> nums;int numE = 0;int k = 0;int flag = 0;for (int i = 0; i < s.size(); i++) {if (s[i] == '=') {numE++;if (numE == 2) {string sk = s.substr(i + 2, s.size() - i - 2);k = stoi(sk);}}if (s[i] == ']') flag = 1;if (flag == 0 && (s[i] == '[' || s[i] == ',')) {int end = i + 1;while (s[end+1] != ',' && s[end + 1] != ']') end++;string snum = s.substr(i+1, end - i);int num = stoi(snum);nums.push_back(num);}}int dif = 0;int maxNum = nums[0];int minNum = nums[0];for (int i = 0; i + k - 1 < nums.size(); i++) {maxNum = nums[i];minNum = nums[i];for (int j = i; j < i + k; j++) {if (maxNum < nums[j]) maxNum = nums[j];if (minNum > nums[j]) minNum = nums[j];}if (dif < maxNum - minNum) dif = maxNum - minNum;}cout << dif << endl;return 0;
}

117 软件架构

原本用set删除功能加以辅助计数,后来发现set.erase删除的是按下标访问的数据,而不是实际数据,map应该也差不多。

改进后代码只能通过30%的测试用例,后面要再改改

#include <iostream>
#include <set>
#include <map>
#include <queue>
#include <stack>
using namespace std;int main() {int n, m;cin >> n >> m;queue<long int> myque;stack<long int> mysta;map<long int, set<long int>> mymap;map<long int, long int> nummap;set<long int> res;int flag = 0;for (int i = 0; i < m; i++) {long int a, b;cin >> a >> b;mymap[b].insert(a);nummap[b]++;}while (res.size() < n) {int num = res.size();for (int i = 0; i < n; i++) {if (res.find(i) == res.end() && nummap[i] == 0) {mysta.push(i);res.insert(i);myque.push(i);}}if (num == res.size()) break;while (!mysta.empty()) {long int t = mysta.top();mysta.pop();for (int i = 0; i < n; i++) {if (res.find(i) == res.end() &&nummap[i] > 0 && mymap[i].find(t) != mymap[i].end())nummap[i]--;}}}if (res.size() < n) cout << -1 << endl;else {while (!myque.empty()) {cout << myque.front() << ' ';myque.pop();}cout << endl;}return 0;
}

这篇关于卡码网用友提前批笔试 | 121 大数减法、122 滑动窗口最大值、117 软件架构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间

uva 10069 DP + 大数加法

代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>#include <cl

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

软件架构模式:5 分钟阅读

原文: https://orkhanscience.medium.com/software-architecture-patterns-5-mins-read-e9e3c8eb47d2 软件架构模式:5 分钟阅读 当有人潜入软件工程世界时,有一天他需要学习软件架构模式的基础知识。当我刚接触编码时,我不知道从哪里获得简要介绍现有架构模式的资源,这样它就不会太详细和混乱,而是非常抽象和易