关于数组的两个C语言小题目

题目一:

给定一个整数数组 nums 和一个整数目标值 target,请你判断数组中是否存在两数之和等于target,存在则输出YES,不存在则输出NO。

示例 :

输入:nums = [2,7,11,15], target = 9
输出:YES
解释:因为 nums[0] + nums[1] == 9 。

思路一:遍历,暴力枚举,依次计算出数组中所有元素两两之间的和,只要找到一个值等于target即可停止查找。

char* addsums(int* nums, int numsSize, int target, int* returnSize) {
    for (int i = 0; i < numsSize; i++) {//第一层循环
        for (int j = i + 1; j < numsSize; j++) {//第二层循环
            if (nums[i] + nums[j] == target) {//判断数组中两个数是否相等
                return YES;//存在相等输出YES
            }
        }
    }
    return NO;//遍历结束还没有找到输出NO
}

题目二:

给你一个整数数组 nums ,请计算数组的 中心下标 。

数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。

如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。

如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。

示例 1:

输入:nums = [1, 0, 3, 5, -2, 6]
输出:3
解释:
中心下标是 3 。
左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 0 + 3 = 4 ,
右侧数之和 sum = nums[4] + nums[5] = -2 + 6 = 4 ,二者相等。

 分析:

1035-26
sum1centersum2
sum

 

我们这这里遇到的第一个困难是,在遍历中心的时候,要算一下左边的数组的和,又要算右边的数组的和,在程序设计上非常麻烦。那我们就观察一下其特点

sum1=sum2;且sum1+sum2+center=sum;则2sum1+center=sum时center既为数组中心

我们这时候发现只要在遍历过程中记录已经遍历的数组的和知否满足要求即可

int pivotIndex(int* nums, int numsSize) {
    int sum=0;//数组总和
    int sum1=0;//左侧数组之和
    for(int i=0 ;i<numsSize; i++)
    {
        sum=nums[i]+sum;//遍历数组计算出数组总和
    }
    
        for(int i=0 ;i<numsSize; i++)
        {//两倍左侧数组之和加上当前位置的数值等于数组总和,既可说明当前位置的左侧和右侧的数组之和相等,既当前位置为数组中心
            
            if(2*sum1+nums[i]==sum)
            {
                return i;
            }
            sum1=sum1+nums[i];
        }
    
    return -1;

    
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值