栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【刷爆LeetCode】五月算法集训(1)数组

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【刷爆LeetCode】五月算法集训(1)数组

题目来源于知识星球—英雄算法联盟,五月算法集训专题

目录
  • 前言
  • 第一题 2016.增量元素之间的最大差值(简单)
    • 1.题目描述
    • 2.解题思路
    • 3.代码演示(C++)
    • 4.题目链接
  • 第二题 2239.找到最接近0的数字(简单)
    • 1.题目描述
    • 2.解题思路
    • 3.代码演示(C++)
    • 4.题目链接
  • 第三题 1475.商品折扣后的最终价格(简单)
    • 1.题目描述
    • 2.解题思路
    • 3.代码演示(C++)
    • 4.题目链接
  • 第四题 2248.多个数组求交集(简单)
    • 1.题目描述
    • 2.解题思路
    • 3.代码演示(C++)
    • 4.题目链接
  • 总结

前言

跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!


第一题 2016.增量元素之间的最大差值(简单) 1.题目描述

2.解题思路
使用两层for循环,第一层遍历数组,从下标0开始遍历到最后一个元素;第二层
循环从第一层循环变量的下一个位置开始遍历,反复求差值,最终返回最大差值。
3.代码演示(C++)
class Solution 
{
public:
    int maximumDifference(vector& nums) 
    {
        int sum=-1;
        for(int i=0;i
            for(int j=i+1;j
                if(nums[j]>nums[i])
                {
                    sum=max(sum,nums[j]-nums[i]);
                }
            }
        }
        return sum;
    }
};
4.题目链接

题目传送门


第二题 2239.找到最接近0的数字(简单) 1.题目描述

2.解题思路
先找到绝对值最小的数字(即最接近0的数字),如果存在绝对值相同的情况,
则返回原值较大的数字。
3.代码演示(C++)
class Solution 
{
public:
    int findClosestNumber(vector& nums) 
    {
        int ans=nums[0];
        for(int i=1;i
            if(abs(nums[i])
                ans=nums[i];//求出绝对值接近0的数字
            }
            else if(abs(nums[i])==abs(ans))//如果绝对值相等,求出原值较大的
            {
                if(nums[i]>ans)
                {
                    ans=nums[i];
                }
            }
        }
        return ans;
        
    }
};
4.题目链接

题目传送门


第三题 1475.商品折扣后的最终价格(简单) 1.题目描述

2.解题思路
首先定义一个vector类型的数组a来作为最后的结果数组,prices数组中的最后
一个元素肯定是没有折扣的,因此数组a的最后一个元素值即为数组prices的最
后一个元素值,然后用for循环进行遍历,如果当前位置的下一个位置的元素值
比当前位置元素值小,则数组a的结果为而个元素值的差值,反之,数组a的结果
为数组prices中当前位置的元素值。
3.代码演示(C++)
class Solution 
{
public:
    vector finalPrices(vector& prices) 
    {
        vectora(prices.size());
        a[prices.size()-1]=prices[prices.size()-1];
        for(int i=0;i
            for(int j=i+1;j
                if(prices[j]<=prices[i])
                {
                    a[i]=prices[i]-prices[j];
                    break;
                }
                else
                {
                    a[i]=prices[i];
                }
            }
        }
        return a;
    }
};
4.题目链接

题目传送门


第四题 2248.多个数组求交集(简单) 1.题目描述

2.解题思路
题目让求的是多个数组的交集,因此交集元素在每个数组中都出现,那么先用一
个数组来存储每个数字出现的次数,当数字出现的次数等于原数组个数时,即为
交集元素,最后对交集元素升序排列即可。

3.代码演示(C++)
class Solution 
{
public:
    vector intersection(vector>& nums) 
    {
            int n=nums.size();//记录共有几个数组
            vectora;
            unordered_mapch;//记录每个数字出现的次数
            for(int i=0;i
                for(int j=0;j
                    ch[nums[i][j]]++;//记录每个数字出现的次数
                    if(ch[nums[i][j]]==n)//题中所说每个数组重元素都不同,数字出现次数=元素个数即为交集
                    {
                        a.push_back(nums[i][j]);//符合题意的数字存入a数组中
                    }
                }
            }
            sort(a.begin(),a.end());
            return a;
    }
};
4.题目链接

题目传送门


总结

每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/887651.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号