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

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

前言

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


一、1588.所有奇数长度子数组的和(简单)

1.题目描述

https://img-blog.csdnimg.cn/9228089a7fce408c9bef9d20774f271b.jpeg =500x

2.解题思路

奇数长度之间的间隔为2,从长度为1开始遍历,开始位置为下标0,结束位置
为开始下标+奇数长度-1,最后将元素累加即可。

3.代码演示(C++)

class Solution 
{
public:
    int sumOddLengthSubarrays(vector<int>& arr) 
    {
        int sum=0;
        int n=arr.size();
        for(int start=0;start<n;start++)
        {
            for(int length=1;length+start<=n;length+=2)
            {
                int end=start+length-1;
                for(int i=start;i<=end;i++)
                {
                    sum+=arr[i];
                }
            }
        }
        return sum;
    }
};

4.题目链接

题目传送门


二、1848.到目标元素的最小距离(简单)

1.题目描述

https://img-blog.csdnimg.cn/2d4646142b14485bbfd589dec0946081.jpeg =500x

2.解题思路

根据题意一步步来即可,简单题

3.代码演示(C++)

class Solution 
{
public:
    int getMinDistance(vector<int>& nums, int target, int start) 
    {
        int n=nums.size();
        int min=999;
        for(int i=0;i<n;i++)
        {
            if(nums[i]==target)
            {
                if(abs(i-start)<min)
                {
                    min=abs(i-start);
                }
            }
        }
        return min;
    }
};

4.题目链接

题目传送门


三、1652.拆炸弹(简单)

1.题目描述

https://img-blog.csdnimg.cn/43544a780b9f4ca1b4642362deeb23da.jpeg =500x

2.解题思路

根据题意,我们会由K的值来对数组进行修改,K大于0时,将第i个数字
用接下来的K个数字之和替换;K小于0时,将第i个数字用之前K个数字
之和替换;K等于0时,将第i个数字用0替换。注意:数组是循环的,最
后一位元素的下一位为首元素!!!

3.代码演示(C++)

class Solution 
{
public:
    vector<int> decrypt(vector<int>& code, int k) 
    {
        vector<int>ans;
        int n=code.size();
        int val=0;
        for(int i=0;i<n;i++)
        {
            val=0;
            if(k>0)
            {
                for(int j=i+1;j<=i+k;j++)
                {
                    val+=code[j%n];
                }
            }
            else if(k<0)
            {
                val=0;
                for(int j=i-1;j>=i+k;j--)
                {
                    val+=code[(j%n+n)%n];
                }
            }
            ans.push_back(val);
        }
       
        return ans;

    }
};

4.题目链接

题目传送门


四、1640.能否连接形成数组(简单)

1.题目描述

https://img-blog.csdnimg.cn/173198a222ce48e0aa327999697ed022.jpeg =500x

2.解题思路

首先定义两个指针,一个指针指向原数组,另一个指针指向pieces数组。
如果某一次遍历不能找到一块匹配的块,则返回false;如果匹配完整,则
原数组指针自增,当原数组指针等于数组长度时返回true;

3.代码演示(C++)

class Solution 
{
public:
    bool canFormArray(vector<int>& arr, vector<vector<int>>& pieces) 
    {
        int i = 0, j, k;
        bool flag = false;
        while(i < arr.size()) 
        {
            flag = false;
            for(j = 0; j < pieces.size(); ++j) 
            {
                if(pieces[j][0] != arr[i]) 
                {
                    continue;
                }
                for(k = 0; k < pieces[j].size(); ++k) 
                {
                    if(pieces[j][k] == arr[i]) 
                    {
                        ++i;
                        flag = true;
                    }
                    else 
                    {
                        return false;
                    }
                }
                if(i == arr.size()) 
                {
                    return true;
                }
            }
            if(!flag) 
            {
                return false;
            }
        }
        return true;
    }
};

4.题目链接

题目传送门


总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值