力扣刷题之3151.特殊数组I

题干描述

如果数组的每一对相邻元素都是两个奇偶性不同的数字,则该数组被认为是一个 特殊数组 。

你有一个整数数组 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;
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值