一、题目概述
有是一道简单题,然后这个是我从开始每日一题以来,第一个自己AC的题,数据也还不错。但是还是不能骄傲,因为肯定有比我的方法,复杂度更低,技巧性更高的方法,还是要继续学习才行。
这个题其实蛮简单的,真的很简单,只要找到规律就好,不用傻傻的算数据。
二、个人思路
题目问的是,最后所有数据的乘积的正负,那我们先来分析一下。
一串数据,有一个是0,那就全是0,直接返回0就行;
有奇数个负数,那最后结果是负数。返回-1;
有几个正数可以不用管,因为不影响返回值。
发现了这个规律,我们写这个题目就简单了很多,代码如下:
class Solution {
public:
int arraySign(vector<int>& nums) {
int flag=1;
for(int i:nums){
if(i==0){
return 0;
}else if(i>0){
}else if(i<0){
if(flag==-1){
flag=1;
}else{
flag=-1;
}
}
}
return flag;
}
};
复杂度如下:
三、大佬思路
大佬的思路跟我一样,四舍五入我就是大佬。
然后官方题解补充了我的时间复杂度:
-
时间复杂度:O(n),其中 n 为数组大小。
-
空间复杂度:O(1)。
四、总结
做一些这样的题,我自信都上来了hhhh,但是我也知道这个题很简单,对了是应该的,没对才是我出大问题。
后面在思考,我在复习数学和期末考试的时候,我要不要也弄一个学习笔记,用于复盘,但是复盘必定会耽误一些时间。试试看吧,最近规划一下。
我们要期末考试了,还有半个多月吧,加油复习,希望考个好成绩。