每日一题:leetcode1006.笨阶乘

题目描述

在这里插入图片描述

题目分析

因为顺序一定且没有括号,所以逻辑很简单。我们要顺序处理的矛盾在于,减号后面会再出现乘法和除法,我们不妨将对乘法和除法用一个临时值进行计算,计算结束后再合并到值里面,一般来讲乘法和除法的处理结果是一个负数,例外是刚开始出现的乘法和除法,我们特殊判断一下,其他的就顺序处理。需要注意的是最后循环结束后我们还要再将临时量合并到值里面,因为有可能没有到除法,没来得及合并。具体可以看代码,很好理解:

class Solution {
public:int clumsy(int N) {int ans = 0;int now_ans = N;int sign = 0;while (--N > 0) {switch (sign) {case 0:now_ans *= N;break;case 1:now_ans /= N;if (!ans) {ans += now_ans;} else {ans -= now_ans;}now_ans = 0;break;case 2:ans += N;break;case 3:now_ans = N;break;}sign = (sign + 1) % 4;}if (!ans) {ans += now_ans;} else {ans -= now_ans;}return ans;}
};

看到题解还有用数学进行消项最后O(1)O(1)O(1)的解法,那个我觉得在我的能力范围之外了。

PS

早上起来顺手写了这道题,然后准备写题解,看到图灵奖名单发布了,觉得那些人才真正的是计算机科学家,而我们这种只是搬砖,在人家搭建的平台上做些事罢了。觉得自己这辈子都达不到人家那种高度了,自己现在的水平可能就是人家大一第一个月的水平,智商也不在同一个层次上,然后感伤了一会。看到leetcode上有字节的招聘,说后端只要go的,我对C++的前景又产生了一些忧虑,在网上看到说C++23快要出了,希望C++能有一个更好的发展。不过说回来我连C++11都没学完呢,我在这里想屁吃。

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

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

相关文章

每日一题:leetcode80.删除有序数组中的重复元素贰

题目描述 题目分析 又是一道贴错标签的简单题&#xff0c;很明显的双指针&#xff0c;我的做法是用两个变量保存是否需要记录&#xff0c;官方题解的做法是直接判断&#xff0c;人家的高明一些 class Solution { public:int removeDuplicates(vector<int>& nums) {…

每日一题:leetcode81.搜索旋转排序数组Ⅱ

题目描述 题目分析 不含重复元素的题解&#xff08;leetcode33&#xff09; 这道题也是我们算法课的一道编程题&#xff0c;写完以后发现当时的思路和现在没有什么变化&#xff0c;果然是自己啊。我的想法是先判断区间整体是升序的还是旋转的&#xff0c;如果是升序的就按照正…

C++ JSON库:JSON for Morden C++

绪论 最近因为项目的需要&#xff0c;需要对JSON进行一定的数据处理&#xff0c;因为想要用C进行编码&#xff0c;便对C的JSON库进行的调研&#xff0c;发现这个库比较好用&#xff1a;JSON for Morder C。 使用指南 想要使用这个json库&#xff0c;只需要在源文件中包含jso…

Linux信号实现精确到微秒的sleep函数:通过sigsuspend函数解决时序竞态问题

原理就是先使用定时器定时&#xff0c;然后再使用pause函数或者sigsuspend函数主动阻塞挂起&#xff0c;最终恢复现场。 如果使用pause函数的话&#xff0c;优点是使用简单&#xff0c;缺点是有可能产生时序竞态&#xff0c;导致进程一直阻塞下去&#xff1a;在定时和挂起之间…

Linux创建多个子进程并通过捕获SIGCHLD信号进行非阻塞回收

我们通过fork函数创建多个子进程&#xff0c;并通过exec函数族在子进程中进行其他的工作&#xff0c;但是为了避免僵尸进程&#xff0c;我们要对子进程进行回收。常用的回收方式是wait或者waitpid进行阻塞回收&#xff0c;因为如果非阻塞回收很难把握时机&#xff0c;而阻塞回收…

Linux创建守护进程

守护进程&#xff08;Daemon&#xff09;是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务&#xff0c;不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过…

Linux创建多个子线程并回收

创建子线程的逻辑相比子进程要更容易理解一些&#xff0c;因为线程没有像进程那样复制很多东西另起炉灶&#xff0c;子线程从传入的开始函数开始运行&#xff0c;但是难点在于传入参数和回收时获取退出状态&#xff0c;因为这两个原本都是void *类型的&#xff0c;而我们在使用…

Qt发布程序

Windows&#xff1a; https://www.cnblogs.com/linuxAndMcu/p/10974927.html Ubuntu&#xff1a; https://blog.csdn.net/u014779536/article/details/107854060

K210入门

之前购买了一个Sipeed Maix M1w Dock k210的开发板&#xff0c;想着自己鼓捣鼓捣&#xff0c;在网上看到了一些好的教程&#xff0c;在这里记录一下&#xff1a; 嵌入式AI从入门到放肆【K210篇】-- 硬件与环境&#xff1a;介绍了各种开发环境的搭建&#xff0c;但是不是特别详细…

C++输入输出:cin/cout 还是 scanf/printf?

相信使用C的人都有一种迷惑或者是不自信&#xff1a;在输入输出的时候是不是应该使用scanf/printf更好呢&#xff0c;因为传说cin/cout龟速&#xff0c;我当时也长期被这个所困扰&#xff0c;后来在阅读C primer第五版的时候我自己做了一个测试&#xff0c;发现如果不使用std::…

UVA - 101:The Blocks Problem

原本以为是一道很简单的模拟题&#xff0c;结果写了一个小时。。。很长时间不碰算法题&#xff0c;的确手感差很多。不过我觉得随着刷题慢慢多起来应该会好的。 题目的意思也有点含糊&#xff0c;需要自己去猜&#xff0c;大概意思就是槽里有一堆木头&#xff0c;每个槽刚开始…

UVA - 12096:The SetStack Computer

题目描述很简单&#xff0c;难点在于如何对集合进行编码&#xff0c;因为是无限的&#xff0c;好像没有一个方向进行编码。 紫书给的题解十分巧妙&#xff1a;给新出现的集合进行编码 的确&#xff0c;我们没有必要为所有可能出现的集合编码后再开始&#xff0c;我们就可以简单…

UVA - 540:Team Queue

主要的关键在于&#xff1a;不要试图让所有团队的人在一个队列里面&#xff0c;因为这样如果新入队的是一个前面团队的成员则必须先出队再入队。 应该把每个团队看做一个整体&#xff0c;用一个队列维护团队的顺序&#xff0c;用t个队列维护每个团队内部的顺序。 还有就是要维…

UVA-136:Ugly Numbers

很简单的一道题&#xff0c;但是我竟然蠢到想不明白为什么如果从头生成会出现大量重复的数字。 写的时候主要出现的错误在爆int上&#xff0c;一定要注意数据范围。 #include <iostream> #include <queue> #include <set>using namespace std; using ll lo…

类的成员函数可以访问属于该类的任意对象的私有变量

之前在书上看到成员函数可以访问类的私有变量的时候觉得是废话嘛&#xff0c;如果成员函数都不能访问那私有变量不就变成了花瓶了。然而发现自己还是太naive。 这句话的意思是&#xff1a;在类的作用域内&#xff0c;包含成员函数、静态成员函数和友元函数内&#xff0c;可以访…

GMP使用入门

最近写了一个高精度的模板&#xff0c;想要用GMP库测试一下&#xff0c;总结一下GMP环境的搭建。 环境搭建&#xff1a;GMP大法教你重新做人(从入门到实战) 解压.tar.lz的 时候可能会遇到一点问题&#xff0c;可以参考这个博客&#xff1a;.tar.lz压缩包解压 需要注意的是C需要…

UVA - 400:Unix ls

题目的难点在于要求前面的每一列的是最大长度L2&#xff0c;最后一列的长度是L。对于宽度为WIDTH60的一行来说&#xff0c;一行可以放下多少个单词决定了需要多少行&#xff0c;知道了行数才能开始根据行数开始放置。 我的做法是col (WIDTH 2) / (L 2)&#xff0c;即提前给W…

UVA - 1592:Database

题目的意思是找到两行在两列处相等&#xff0c;主要要做的是记录某个值是否重复出现过。 经过思考&#xff0c;我的思路是&#xff1a;每一列用一个unordered_map<string,vector<int>>记录单词出现的行数&#xff0c;对于某一行中的两列&#xff0c;如果有两个元素…

C++ array初始化需要双层大括号

对于array的初始化我们可以使用列表初始化&#xff1a; array<int, 8> test {1,2,3,4,5,6,7,8 };但是当我们不再使用简单的内置类型array时&#xff1a; array<pair<int, int>, 8> dirs {{-1, -1},{-1, 0},{-1, 1},{0, -1},{0, 1},{1, -1},{1, 0},{1, 1}…

Qt for Android环境配置

最近想写一个小APP&#xff0c;但是又不想用Android Studio进行开发&#xff0c;想要用C进行开发&#xff0c;听说Qt可以进行Android开发&#xff0c;就想尝试一下&#xff0c;结果花了一天时间来配置环境。。。而且发现windows下配置环境更简单一些&#xff08;我中途还切换到…