每日力扣-数组元素积的符号

86 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情

每日力扣是一个专门用来讲力扣中国每天发布的每日一题的栏目。本专栏不提供题目的解答源码,只讲解思路,目的是养成每日刷题、提高自己手感,从而达到算法熟练的目标。

题目(已做删减处理)

已知函数 signFunc(x) 将会根据 x 的正负返回特定值:如果 x 是正数,返回 1 。如果 x 是负数,返回 -1 如果 x 是等于 0 ,返回 0 。给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的乘积。返回 signFunc(product) 。

分析

这道题目大部分人第一时间想到的,肯定是直接对数组中的数据进行乘法操作,然后将得到的最后的结果进行判断。但是这样就带来了一个问题:没办法预测数据的范围。那也就导致了如果数组中有大数的话,很有可能导致最后的结果不对。

因此,我们需要从规律中解决。任何一个数字与0相乘,其结果也必然是0,因此如果数组中有0的话,直接返回0就可。使用tmp来记录数组中复数的个数。如果为奇数,说明最后的成绩肯定是个负数,返回-1即可;否则,返回1即可。

总结

一道很简单的算法题。这道题目并不涉及复杂的数据结构。甚至是一点都没有数据结构的影子,但是是一道特别适合学习的题目。之所以我这么喜欢这道题目,是因为它更代表性地显示了算法题应该有的解题思路:你如果不知道题目中的一些知识点,也可以通过比较暴力的手段解决。

我希望大家能够第一次就AC这道题目,如果你一开始没有想到更简单的解题方法,那希望你能够从这道题目中得到些思路。

解题证明

image.png