C/C++每日一练(20230322)

news/2024/5/20 8:26:33 标签: c++, 动态规划, 滑动窗口

目录

1. 商家商品销售量统计  🌟

2. 乘积最大子数组  🌟🌟

3. 滑动窗口最大值  🌟🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 商家商品销售量统计

现在有一个网站上半年的商品销售量,请你写一段代码帮助店主统计前半年的总销量和平均销量。

                                          商品销售表

 1月份 2月份 3月份 4月份 5月份 6月份 总销量 平均销量
  64  53  77  59   61  42     0   0

(1)函数中应定义一个包含8个元素的一维数据,用来存放6个月的商品销量和统计后的总销量及平均销量;
(2)完成6个月销量的输入;
(3)计算半年的总销量及平均销量;
(4)按照程序运行效果图,输出商品销量表。 

出处:

https://edu.csdn.net/practice/23387034

代码:

#include<stdio.h>
int main()
{
    int a[8],s=0;
    printf("----------商家商品销售统计----------\n");
    printf("\n");
    printf("请输入商品6个月的销售量:");
    for (int i = 0; i < 6; i++)
    {
        scanf("%d", &a[i]);
        s += a[i];
    }
    printf("\n\t\t\t商品销量表\t\t\t\n");
    printf("—————————————————————————————————\n");
    for (int i = 1; i <= 8; i++)
    {
        if (i <= 6)
            printf("  %d月份 ", i);
        else if (i == 7)
            printf(" 总销售 ");
        else
            printf("平均销售\n");
    }
    for (int i = 0; i < 8; i++)
    {
        if (i < 6)
            printf("   %d  |", a[i]);
        else if (i == 6)
        {
            a[i] = s;
            printf("   %d  |", a[i]);
        }
        else
        {
            a[i] = s / 6;
            printf("   %d  |",a[i]);
        }
    }
    return 0;
}

输入输出:

----------商家商品销售统计----------

请输入商品6个月的销售量:64 53 77 59 61 42

                        商品销量表
—————————————————————————————————
  1月份   2月份   3月份   4月份   5月份   6月份  总销售 平均销售
   64  |   53  |   77  |   59  |   61  |   42  |   356  |   59  | 


2. 乘积最大子数组

给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

示例 1:

输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。

示例 2:

输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。 

出处:

https://edu.csdn.net/practice/23387032

代码:

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int maxProduct(vector<int> &nums)
    {
        int ans = -10000000;
        int n = nums.size();
        int max1 = 1, min1 = 1, mx, mn;
        for (int i = 0; i < n; i++)
        {
            mx = max1;
            mn = min1;
            max1 = max(mx * nums[i], max(nums[i], mn * nums[i]));
            min1 = min(mn * nums[i], min(nums[i], mx * nums[i]));
            ans = max(max1, ans);
        }
        return ans;
    }
};

int main()
{
	Solution s;
	vector<int> nums = {2,3,-2,4};
	cout << s.maxProduct(nums) << endl;

	nums = {-2,0,-1};
	cout << s.maxProduct(nums) << endl;

	return 0;
}

输入输出:

6
0


3. 滑动窗口最大值

给你一个整数数组 nums,有一个大小为 k 滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回滑动窗口中的最大值。

示例 1:

输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置                最大值
---------------              -----
[1  3 -1] -3  5  3  6  7       3
1 [3  -1  -3] 5  3  6  7       3
1  3 [-1  -3  5] 3  6  7       5
1  3  -1 [-3  5  3] 6  7       5
1  3  -1  -3 [5  3  6] 7       6
1  3  -1  -3  5 [3  6  7]      7

示例 2:

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

示例 3:

输入:nums = [1,-1], k = 1
输出:[1,-1]

示例 4:

输入:nums = [9,11], k = 2
输出:[11]

示例 5:

输入:nums = [4,-2], k = 2
输出:[4]

提示:

  • 1 <= nums.length <= 10^5
  • -10^4 <= nums[i] <= 10^4
  • 1 <= k <= nums.length

出处:

https://edu.csdn.net/practice/23387033

代码:

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    vector<int> maxSlidingWindow(vector<int> &nums, int k)
    {
        vector<int> ans;
        int n = nums.size();
        if (n == 0 || k > n)
            return ans;
        deque<int> que;
        for (int i = 0; i < n; i++)
        {
            if (!que.empty())
            {
                if (i >= que.front() + k)
                    que.pop_front();
                while (!que.empty() && nums[i] >= nums[que.back()])
                    que.pop_back();
            }
            que.push_back(i);
            if (i + 1 >= k)
                ans.push_back(nums[que.front()]);
        }
        return ans;
    }
};

string vectorToString(vector<int> vect) {
    stringstream ss;
	ss << "[";
    for (int i = 0; i < vect.size(); i++)
	{
        ss << to_string(vect[i]);
        ss << (i < vect.size() - 1 ? "," : "]");
    }
    return ss.str();
}

int main()
{
	Solution s;
	vector<int> nums = {1,3,-1,-3,5,3,6,7};
	cout << vectorToString(s.maxSlidingWindow(nums, 3)) << endl;

	return 0;
}

输入输出:

[3,3,5,5,6,7]


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


http://www.niftyadmin.cn/n/172219.html

相关文章

java 每日一练 (10)

文章目录1. 单选2. 编程题1. 单选 1. 下列运算符合法的是&#xff08; &#xff09; A : && B: <> C: if D : 答案 : A &#xff0c; && 与运算符 &#xff0c; <> 指定泛型的值 &#xff0c; if 条件 语句 , 赋值 2. 下面代码运行结果是 ()  …

ICMP 协议

一、ICMP 协议 &#xff08;1&#xff09;ICMP是 Internet Control Message Protocol 的缩写&#xff0c;即互联网控制消息协议。它是互联网协议族的核心协议之一。它用于 TCP/IP 网络中发送控制消息&#xff0c;提供可能发生在通信环境中的各种问题反馈&#xff0c;通过这些信…

【宝剑出鞘】第一式:综合服务站项目

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

YOLOV3详解

1. YOLOV3引入 图来自于江大白的CSDN博客 2. 为什么学习YOLOV3&#xff1f; YOLOV3跟V2/V1相比采用了残差的思想&#xff0c;可以说是基于ResNet的思想上重新设计了backbone(DarkNet53)。V1/V2的backbone采用的是VGG类型的结构, 借着学习V3, 复习ResNet以及为什么DarkNet会…

JavaWeb过滤器和监听器使用介绍

文章目录过滤器和监听器FilterFilter快速入门FIlter执行流程FIlter使用细节Listener过滤器和监听器 Filter Filter 表示过滤器&#xff0c;是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。 过滤…

【nginx实战】nginx实现虚拟主机及访问认证实战

前言 大家好&#xff0c;我是沐风晓月&#xff0c;本文首发于csdn 博客专栏【linux基本功-系统服务实战】&#xff0c;希望给想要学习架构的小伙伴打造一套系统的专栏&#xff0c;一起学习&#xff0c;共同进步。本文主要讲解nginx实现虚拟主机及访问认证 &#x1f3e0;个人主…

985 211 University

985工程高校名单&#xff08;39所&#xff09;   1、清华大学&#xff08;北京&#xff09;   2、北京大学&#xff08;北京&#xff09;   3、厦门大学&#xff08;福建厦门&#xff09;   4、中国科学技术大学&#xff08;安徽合肥&#xff09;   5、南京大学&…

【K8S系列】深入解析Pod对象(一)

目录 序言 1.问题引入 1.1 问题描述 2 问题解答 2.1 pod 属性 2.1.1 NodeSelector 2.1.2 HostAliases 2.1.3 shareProcessNamespace 2.1.4 NodeName 2.1.5 其他pod属性 2.2 容器属性 2.2.1 ImagePullPolicy 2.2.2 Lifecycle 3 总结 4. 投票 序言 任何一件事情&am…