首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

数字字串解决方案

2013-01-25 
数字字串题目描述给你一个长度为n的数字串,数字串里会包含1-m这些数字。如果连续的一段数字子串包含了1-m这

数字字串
题目描述
给你一个长度为n的数字串,数字串里会包含1-m这些数字。如果连续的一段数字子串包含了1-m这些数字,则称这个数字字串为NUM串。你的任务是求出长度最短的NUM串是什么,只需要输出这个长度即可。 1< =n,m< =200000

此题要求用类与对象的方法来求解。


输入
第一行给定n和m。  第二行n个数,表示数字串,数字间用空格隔开。

输出
如果存在NUM串则输出最短NUM串长度,否则输出“NO”。

样例输入
5 3
1 2 2 3 1

样例输出
3

import java.util.Scanner;


public class 数字字串 {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner rd=new Scanner(System.in);
int n=rd.nextInt();
int m=rd.nextInt();
int arr[]=new int[n];
for(int i=0;i<arr.length;i++)
{
arr[i]=rd.nextInt();
}
NumberStr num=new NumberStr();
num.SetArray(arr, m);
}
}
class NumberStr
{
public static void SetArray(int arr[],int m)
{
int array[]=new int[m];
System.arraycopy(arr, 0, array, 0, m);
int marray[]=new int[m];
int j=1;
int k=0;
for(int i=0;i<marray.length;i++)
{
marray[i]=j;
j++;
}
for(int i=0;i<marray.length;i++)
{
for(int q=0;q<marray.length;q++)
{
if(array[i]==marray[q])
{
k++;
}
}
}
System.out.print(k);
}

}

应该怎样改才能求连续出现1-m数字才计算
[解决办法]
逻辑思路如下
int startIndex = i, endIndex = i;
for (int j = i + 1; j < length; ++j) {
    if (array[j] == array[j - 1] + 1) { // 后一个比前一个大1
        endIndex = j;
    } else {
        break;
    }
}

if (endIndex > startIndex) {
    // 1-m的子串
    String numStr = array[startindex, endIndex];
}

热点排行