题目描述
给你一个长度为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];
}
------其他解决方案--------------------
不是很懂,具体是在哪里改?你说说我的问题在哪里,然后我改就容易些,
------其他解决方案--------------------
没看太懂。。。