题干描述
如果数组的每一对相邻元素都是两个奇偶性不同的数字,则该数组被认为是一个 特殊数组 。
你有一个整数数组 nums
。如果 nums
是一个 特殊数组 ,返回 true
,否则返回 false
。
示例 1:
输入:nums = [1]
输出:true
解释:
只有一个元素,所以答案为 true
。
示例 2:
输入:nums = [2,1,4]
输出:true
解释:
只有两对相邻元素: (2,1)
和 (1,4)
,它们都包含了奇偶性不同的数字,因此答案为 true
。
示例 3:
输入:nums = [4,3,1,6]
输出:false
解释:
nums[1]
和 nums[2]
都是奇数。因此答案为 false
。
题干分析
题目理解
题目要求判断一个数字是否是为特殊数组。特殊数组的定义是:数组中的每一对相邻元素的奇偶性必须不同。也就是说,如果一个元素时技术,那么它的想一个相邻元素必须是偶数,反之亦然。
解题思路
1.特殊情况处理
- 如果数组的长度为0或为1,则直接返回true。因为数组为空或只有一个元素时,没有相邻的元素对,因此它可以被视为满足条件的特殊数组。
2.遍历数组
- 如果数组长度大于1,我们就需要检查没对相邻元素的奇偶性。这个操作通过循环实现。
- 在循环中,我们从第一个元素开始,依次比较相邻的两个元素(nums[i]和nums[i+1])。比较时需要检查者两个元素的奇偶性是否不同。
3.奇偶性判断
- 使用模运算%来判断元素的奇偶性。num % 2的结果为0时表示该数字是偶数,结果为1表示是奇数。
- 如果两元素的模运算结果相同,则说明它们的奇偶性相同。这时就可以确定这个数组不是特殊数组,因此可以直接返回false。
4.返回结果
- 如果整个数组遍历完,所有相邻的元素对都没有出现奇偶性相同的情况,说明数组满足特殊数组的条件返回true。
完整代码如下:
#include <stdio.h>
#include <stdbool.h>
//函数英语检查数组是否为特殊数组
bool isArraySpecial(int* nums, int numsSize) {
//如果数组长度为0或1,则认为它是特殊数组
if (numsSize <= 1)
{
return true;
}
//遍历数组,检查相邻的元素对
for (int i = 0; i < numsSize - 1; i++)
{
//检查两个数字是否具有相同的奇偶性
if ((nums[i] % 2) == (nums[i + 1] % 2))
{
//如果具有相同的奇偶性,则不是特殊数组
return false;
}
}
//如果所有相邻对的奇偶性不同,则是特殊数组
return true;
}
// 示例使用
int main() {
// 测试用例1:特殊数组
int nums1[] = { 1, 2, 3, 4, 5 };
int nums1Size = sizeof(nums1) / sizeof(nums1[0]);
if (isArraySpecial(nums1, nums1Size)) {
printf("数组1是特殊数组\n");
}
else {
printf("数组1不是特殊数组\n");
}
// 测试用例2:不是特殊数组
int nums2[] = { 1, 3, 5, 7, 9 };
int nums2Size = sizeof(nums2) / sizeof(nums2[0]);
if (isArraySpecial(nums2, nums2Size)) {
printf("数组2是特殊数组\n");
}
else {
printf("数组2不是特殊数组\n");
}
// 测试用例3:特殊数组
int nums3[] = { 2, 3, 4, 5, 6 };
int nums3Size = sizeof(nums3) / sizeof(nums3[0]);
if (isArraySpecial(nums3, nums3Size)) {
printf("数组3是特殊数组\n");
}
else {
printf("数组3不是特殊数组\n");
}
return 0;
}