每日OJ题_牛客_最长无重复子数组_滑动窗口_C++_Java

目录

牛客_最长无重复子数组_滑动窗口

题目解析

C++代码1暴力

C++代码2滑动窗口

Java代码滑动窗口


牛客_最长无重复子数组_滑动窗口

最长无重复子数组_牛客题霸_牛客网 (nowcoder.com)

描述:

            给定一个长度为n的数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。

子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组


题目解析

        经典滑动窗口,使用两个指针,一个i一个j,最开始的时候i和j指向第一个元素,然后i往后移,把扫描过的元素都放到map中,如果i扫描过的元素没有重复的就一直往后移,顺便记录一下最大值max,如果i扫描过的元素有重复的,就改变j的位置。也可使用暴力AC。

C++代码1暴力

#include <ostream>
#include <unordered_set>
#include <vector>
class Solution {
public:
	/**
	* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
	*
	*
	* @param arr int整型vector the array
	* @return int整型
	*/
	int maxLength(vector<int>& arr) {
		int res = 1, sz = arr.size();
		for (int i = 0; i < sz; ++i)    // 暴力
		{
			int len = 1;
			vector<bool> hash(100001, false);
			hash[arr[i]] = true;
			for (int j = i + 1; j < sz && hash[arr[j]] == false; ++j)
			{
				++len;
				hash[arr[j]] = true;
			}
			res = max(res, len);
		}   
		// for (int i = 0; i < sz; )    // 笔试时写的,8/11
		// {
		// 	int len = 1;
		// 	vector<bool> hash(100001, false);
		// 	hash[arr[i++]] = true;
		// 	while (i < sz && hash[arr[i]] == false)
		// 	{
		// 		++len;
		// 		hash[arr[i]] = true;
		// 		++i;
		// 	}
		// 	res = max(res, len);
		// }
		return res;
	}
};

C++代码2滑动窗口

#include <ostream>
#include <unordered_set>
#include <vector>
class Solution {
public:
	/**
	* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
	*
	*
	* @param arr int整型vector the array
	* @return int整型
	*/
	int maxLength(vector<int>& arr) {
		int res = 1, sz = arr.size();
		for (int i = 0; i < sz; ++i)    // 暴力
		{
			int len = 1;
			vector<bool> hash(100001, false);
			hash[arr[i]] = true;
			for (int j = i + 1; j < sz && hash[arr[j]] == false; ++j)
			{
				++len;
				hash[arr[j]] = true;
			}
			res = max(res, len);
		}   
		// for (int i = 0; i < sz; )    // 笔试时写的,8/11
		// {
		// 	int len = 1;
		// 	vector<bool> hash(100001, false);
		// 	hash[arr[i++]] = true;
		// 	while (i < sz && hash[arr[i]] == false)
		// 	{
		// 		++len;
		// 		hash[arr[i]] = true;
		// 		++i;
		// 	}
		// 	res = max(res, len);
		// }
		return res;
	}
};

Java代码滑动窗口

import java.util.*;
public class Solution
{
    public int maxLength (int[] arr) 
    {
        int[] hash = new int[100010];
        int left = 0, right = 0, n = arr.length;
        int ret = 0;
        while(right < n)
        {
            hash[arr[right]]++; // 进窗⼝
            while(hash[arr[right]] > 1) // 判断
            {
                // 出窗⼝
                hash[arr[left]]--;
                left++;
            }
            ret = Math.max(ret, right - left + 1); // 更新结果
            right++;
        }
        return ret;
    }
}
引用是一段关于利用pwntools库对jarvisoj_level0进行攻击的代码。代码中使用了remote()方法建立了远程连接,并构造了一个payload来利用栈溢出漏洞,最终执行callsystem()函数来获取shell权限。引用也是类似的代码,只是连接的地址不同。引用是一篇关于pwntools基本用法的文章,并提供了一些常用的函数和方法。根据这些引用内容,可以得出结论,jarvisoj_level0是一个存在栈溢出漏洞的程序,可以通过构造特定的payload来执行系统调用函数,从而获取shell权限。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [jarvisoj_level0](https://blog.csdn.net/weixin_56301399/article/details/125919313)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [jarvisOJ-level0](https://blog.csdn.net/qq_35661990/article/details/82889103)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [jarvis oj---level0解方法](https://blog.csdn.net/weixin_45427676/article/details/97272924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GR鲸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值