C语言暑假刷题冲刺篇——day6(2)

简介: 在大家学完初阶C语言后,有很多知识点是比较模糊的,我们应该多刷题,这样才能巩固我们所学知识。所以我开了一个新专栏C语言每日一刷,每一篇都包含5道选择题,2道编程题,每一道题后面都会有详细的解析。这个系列每日一更,大家来看看吧!

二、编程题

1.OJ链接 【leetcode 题号:747. 至少是其他数字两倍的最大数】【难度:简单】


给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。


示例:

输入:nums = [3,6,1,0]

输出:1

解释:6 是最大的整数,对于数组中的其他整数,6 大于数组中其他元素的两倍。6 的下标是 1 ,所以返回 1 。

输入:nums = [1,2,3,4]

输出:-1

解释:4 没有超过 3 的两倍大,所以返回 -1 。

输入:nums = [1]

输出:0

解释:因为不存在其他数字,所以认为现有数字 1 至少是其他数字的两倍。


提示:

1 <= nums.length <= 50

0 <= nums[i] <= 100

nums 中的最大元素是唯一的


思路与算法:

遍历数组分别找到数组的最大值 m1和次大值m2。如果m1≥m2×2 成立,则最大值至少是数组其余数字的两倍,此时返回最大值的下标,否则返回 -1。为了返回最大值的下标,我们需要在计算最大值的同时记录最大值的下标。

int dominantIndex(int* nums, int numsSize)
{
    if (numsSize == 1) return 0;
    int max = 0, secmax = 0, maxindex = 0;
    int i;
    for (i = 0; i < numsSize; i++)
    {
        if (nums[i] > max)
        {
            secmax = max;
            maxindex = i;
            max = nums[i];
        }
        else if (nums[i] > secmax)
        {
            secmax = nums[i];
        }
    }
    if (max < 2 * secmax)
        return -1;
    return maxindex;
}


2.OJ链接【 leetcode 题号:349. 两个数组的交集】【难度:简单】


给定两个数组,编写一个函数来计算它们的交集。


示例:

输入:nums1 = [1,2,2,1], nums2 = [2,2]

输出:[2]

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]

输出:[9,4]


思路:

暴力破解即可,将 nums1 数组中的每一个数字,判断是否存在于 nums2 数组中,通过这种方式找出交集数据,找出之后判断这个数组是否已经在返回数组中存在,不存在则添加到返回数组中即可。

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize)
{
    static int arr[1000];
    *returnSize = 0;
    int i, j;
    for (i = 0; i < nums1Size; i++) 
    {
        for (j = 0; j < nums2Size; j++) 
        {
            if (nums2[j] == nums1[i]) //判断nums1[i] 是否在nums2数组中
                break;
        } 
        if (j == nums2Size) // nums1中i位置的数据在nums2数组中不存在,则非交集数据
        {
           continue; 
        }
        //只有在另一个数组中存在的数据才能走下来,判断是否已经被添加到返回数组中
        for (j = 0; j < *returnSize; j++) 
        {
            if (nums1[i] == arr[j]) //判断nums1[i] 是否在 arr 这个返回数组中
                break;
        }
        if (j == *returnSize) //不在返回数组中,则添加到返回数组中
        {
                arr[*returnSize] = nums1[i];
                *returnSize += 1;
        }
    }
    return arr;
}


好了,今天的每日一刷就到这里结束了,感谢大家的观看!


相关文章
|
6月前
|
安全 C语言
【C语言刷题】字符串逆序
【C语言刷题】字符串逆序
57 0
|
6月前
|
存储 C语言
【C语言刷题】操作符系列
【C语言刷题】操作符系列
44 0
|
6月前
|
C语言
【C语言刷题】青蛙跳台阶
【C语言刷题】青蛙跳台阶
89 1
|
6月前
|
机器学习/深度学习 C语言
【C语言刷题】函数递归系列
【C语言刷题】函数递归系列
32 1
|
7月前
|
编译器 C语言
C语言刷题(1)
C语言刷题(1)
52 0
|
6天前
|
C语言
C语言刷题1
C语言刷题1
|
2月前
|
C语言
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
29 0
|
2月前
|
C语言
错误的集合(初阶C语言刷题)
错误的集合(初阶C语言刷题)
|
3月前
|
C语言
C语言刷题训练【第11天】
C语言刷题训练【第11天】
|
3月前
|
C语言
C语言刷题训练【第十天】
C语言刷题训练【第十天】

相关实验场景

更多