求最短连续子序列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求最短连续子序列相关的知识,希望对你有一定的参考价值。

给定一个数串和一个数S,在数串中找出大于等于S的一个连续子列!且该子列是满足上述条件的最短子列!
数串数字个数N:10<N<100000,每个数小于10000,都是非负的。
输出最短连续的子序列的个数和子序列
Input:
10 15
5 1 3 5 10 7 4 9 2 8
5 11
1 2 3 4 5
10 15
1 2 3 4 5 6 7 8 6 1

Output:
2
5 10
3
3 4 5
2
7 8

参考技术A /*********
说明:因为子序列可能很多,我取的是最早出现的最大的那个序列
*******/

#include <iostream>
#include <cstdio>
using namespace std;
/*
有n个正整数组成一个 序列。给定整数s, 求长度最短的连续序列, 使他们的最大和大于或等于S。
其中10<n<100000 0<S<10^9 正整数不超过10000
*/
const int N=100005;
int a[N];
int inline min(int x,int y)
return x<y?x:y;

int main()
int n,s;
while(scanf("%d%d",&n,&s)!=EOF&&n)
for(int i=1;i<=n;++i)
scanf("%d",a+i);
a[i]+=a[i-1];

if(s>a[n])
printf("impossible\n");
continue;

int ans=n;
for(int i=0;i!=n;++i)
int l=i+1,r=n,mid;
if(a[r]-a[i]<s) break;
while(l<=r)
mid=(l+r)>>1;
if(a[mid]-a[i]>=s) r=mid-1;
else l=mid+1;

ans=min(ans,l-i);

printf("%d\n",ans);
int tmp=s-1,index=0;
for(int i=0;i<=n-ans;++i)
if(a[i+ans]-a[i]>tmp)
index=i;
tmp=a[i+ans]-a[i];


for(int i=0;i!=ans;++i)
printf("%d ",a[i+index+1]-a[i+index]);
printf("\n");

return 0;

最短无序连续子数组

题目描述

给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。

你找到的子数组应是最短的,请输出它的长度。

示例 1:

输入: [2, 6, 4, 8, 10, 9, 15]
输出: 5
解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。

说明 :

  1. 输入的数组长度范围在 [1, 10,000]。
  2. 输入的数组可能包含重复元素 ,所以升序的意思是<=。

分析

这个题目我就比较偷懒了,直接排序然后找前后不一样的数的位置就行了

贴出代码

class Solution {
    public int findUnsortedSubarray(int[] nums) {
        int[] sortedArr = Arrays.copyOf(nums,nums.length);
        Arrays.sort(sortedArr);
        int i = 0,j = nums.length - 1;
        while(nums[i] == sortedArr[i] && i < j)
            i++;
        while(nums[j] == sortedArr[j] && i < j)
            j--;
        if(i == j)
            return 0;
        else
            return j - i + 1;
    }
}

以上是关于求最短连续子序列的主要内容,如果未能解决你的问题,请参考以下文章

bzoj4032: [HEOI2015]最短不公共子串

2022-09-19:给定字符串 S and T,找出 S 中最短的(连续)子串 W ,使得 T 是 W 的 子序列 。 如果 S 中没有窗口可以包含 T 中的所有字符,返回空字符串 ““。 如果有不

[转]LCT讲解

Xor sum HDU - 6955

求最大连续子序列之和c语言

BZOJ4032: [HEOI2015]最短不公共子串(LibreOJ #2123)