【Leetcode -643.子数组最大平均值Ⅰ -645.错误的集合】

简介: 【Leetcode -643.子数组最大平均值Ⅰ -645.错误的集合】

Leetcode -643.子数组最大平均值Ⅰ

题目:给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。

请你找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。

任何误差小于 10^- 5 的答案都将被视为正确答案。

示例 1:

输入:nums = [1, 12, -5, -6, 50, 3], k = 4

输出:12.75

解释:最大平均数(12 - 5 - 6 + 50) / 4 = 51 / 4 = 12.75

示例 2:

输入:nums = [5], k = 1

输出:5.00000

思路是使用滑动窗口,依次取这 k 项中的和的较大值,如下图所示:

代码如下:

double findMaxAverage(int* nums, int numsSize, int k)
    {
        double sum = 0, ans = 0;
        //先将前 k 项和加起来
        for (int i = 0; i < k; i++)
        {
            sum += nums[i];
        }
        //前 k 项和赋给最大且长度为 k 的连续子数组元素的和
        double maxsum = sum;
        //将前 k 项和减去这 k 项和中的第一项,再加上当前项,就实现了滑动窗口
        //再比较当前 sum 与 maxsum 的较大值,maxsum取较大值
        for (int i = k; i < numsSize; i++)
        {
            sum = sum - nums[i - k] + nums[i];
            maxsum = fmax(sum, maxsum);
        }
        //最后返回平均数
        return maxsum / k;
    }

Leetcode -645.错误的集合

题目:集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合丢失了一个数字并且有一个数字重复 。

给定一个数组 nums 代表了集合 S 发生错误后的结果。

请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。

示例 1:

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

输出:[2, 3]

示例 2:

输入:nums = [1, 1]

输出:[1, 2]

思路是生成1 - n个整数,记录每个数出现的次数,如果某个数出现两次,即是重复的数;如果某个数没有出现过,即是丢失的整数;

int* findErrorNums(int* nums, int numsSize, int* returnSize)
    {
        //定义一个hash数组,并初始化为0
        int hash[10001] = { 0 };
        //记录每个数字出现的次数
        for (int i = 0; i < numsSize; i++)
        {
            hash[nums[i]]++;
        }
        //开辟返回数组,数组长度为2
        int* ret = (int*)malloc(sizeof(int) * 2);
        *returnSize = 2;
        //如果hash[i] == 2,说明这一个数出现两次,即是我们要找的重复的数
        //如果hash[i] == 0,说明这一个数没出现过,即是我们要找的丢失的数
        for (int i = 1; i <= numsSize; i++)
        {
            if (hash[i] == 2)
                ret[0] = i;
            if (hash[i] == 0)
                ret[1] = i;
        }
        //返回数组
        return ret;
    }
目录
相关文章
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer II 082. 含有重复元素集合的组合
解决LeetCode平台《剑指 Offer II 082. 含有重复元素集合的组合》题目的Python代码实现,通过深度优先搜索算法找出所有和为特定目标值的数字组合,并在搜索过程中通过排序和跳过重复元素来避免解集中出现重复组合。
40 2
|
3月前
|
算法 Python
【Leetcode刷题Python】子数组查找
一个用于寻找给定字符串中最长重复子串的Python函数实现,采用了滑动窗口的方法来检测重复的子串。
20 1
|
3月前
|
算法 Java
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
42 0
|
5月前
|
算法 测试技术 程序员
力扣经典150题第三十题:长度最小的子数组
力扣经典150题第三十题:长度最小的子数组
29 1
|
4月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
技术经验解读:【LeetCode】560.SubarraySumEqualsK子数组和为K
技术经验解读:【LeetCode】560.SubarraySumEqualsK子数组和为K
|
5月前
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
|
6月前
|
算法
"刷题记录:哈希表+双指针 | leetcode-2465. 不同的平均值数目 "
该文段是一篇关于编程题目的解答,主要讨论如何找到数组中所有不同平均值的个数。作者首先使用排序和哈希集来解决,将数组转为列表排序后,通过双指针计算平均值并存入哈希集以去重。然后,作者发现可以优化方案,通过双指针在排序后的数组中直接计算两数之和,用哈希集记录不重复的和,从而避免实际计算平均值,提高了算法效率。最终代码展示了这两种方法。
57 0
|
6月前
[leetcode] 705. 设计哈希集合
[leetcode] 705. 设计哈希集合
|
6月前
【力扣】209. 长度最小的子数组
【力扣】209. 长度最小的子数组