我是Java编程(或编程实际)的新手。
我有一个数组,其中只包含4
或6
。给定一个数字4
或6
,找到给定数字的最高连续出现次数。
我需要最高的顺序发生次数
示例:arr[{4,4,6,6,4,4,4,4,4,6}]
如果给出上述数组,并且下一个输入数字为4
,则输出应为5
。因为数字4
已连续发生5次。
public static void main(String[] args) throws IOException {
String arrayTK = br.readLine(); // Input is 4466444446
int[] inpArray = new int[10];
for (int i = 0; i < 10; i++) {
inpArray[i] = arrayTK.charAt(i) - '0';
}
int maxSequenceTimes = 0;
for (int j = 0; j < 10; j++) {
// Logic
}}
非常感谢任何帮助。
答案 0 :(得分:1)
修改强>
我们将分离并计算所有序列,然后在每个序列中搜索以知道哪个序列包含最大长度。
int[] arr = {4,4,6,6,4,4,4,4,4,6};
boolean newSeq = false;
int diffrentSeq = 0;
int currentNumber;
//Get sequence numbers
for (int i = 0; i < arr.length; i++) {
currentNumber = arr[i];
if (i >= 1 && currentNumber != arr[i - 1])
newSeq = true;
else if (i == 0)
newSeq = true;
//It's new sequence!!
if (newSeq) {
diffrentSeq++;
newSeq = false;
}
}
System.out.println(diffrentSeq);
int[] maxSequencSize = new int[diffrentSeq];
int lastIndex = 0;
for (int i = 0; i < maxSequencSize.length; i++) {
int currentNum = arr[lastIndex];
for (int j = lastIndex; j < arr.length; j++) {
if (arr[j] == currentNum) {
maxSequencSize[i]++;
lastIndex = j + 1;
} else break;
}
}
System.out.println(max(maxSequencSize));
您需要获取最大序列长度的最大值:
private static int max(int[] array){
int maxVal = 0;
for (int anArray : array) {
if (anArray > maxVal)
maxVal = anArray;
}
return maxVal;
}
答案 1 :(得分:0)
你需要这样的东西:
import java.util.Scanner;
public class A {
public static void main(String[] args) {
Scanner br =new Scanner(System.in);
String str = br.next();
int arr[]=new int[str.length()];
for(int i=0;i<str.length();i++)
{
arr[i]=str.charAt(i)-'0';
//System.out.println(arr[i]);
}
int j=0;
int count=1,max=0;
for(int i=0;i<str.length();i++)
{
if(i==0){
j=arr[i];
}
else
{
if(arr[i]==j)
{
count++;
//System.out.println(" "+count);
}
else
{
if(max<count){
max=count;
}
count=1;
j=arr[i];
}
}
}
if(max<count){
max=count;
}
System.out.println(max);
}
}
答案 2 :(得分:0)
那应该做的工作。每当你找到匹配值时,你就开始计算,当条纹结束时,你将长度与你到目前为止找到的最大长度进行比较。
public int logic(int[] inpArray, int num) {
int count = 0, max = 0
for(int i = 0; i < 10; ++i){
if(inpArray[i] == num) {
count++
else{
if(count > max)
max = count;
count = 0;
}
}
if (count > max)
max = count;
return max;
}
答案 3 :(得分:0)
String arrayTK = br.readLine(); // Input is 4466444446
因为您的第一个输入是字符串,所以您不需要将其转换为int数组,如果您使用的话,可以使用:
String arrayTK = "4466444446";
int result = Arrays.asList(arrayTK.replaceAll("(\\d)((?!\\1|$))", "$1;$2").split(";"))
.stream().max(Comparator.comparingInt(String::length)).get().length();
System.out.println(result);
说明:
arrayTK.replaceAll("(\\d)((?!\\1|$))", "$1;$2")
在每两个不同的数字之间放置一个分隔符,结果应为44;66;44444;6
.split(";")
与此分隔符分开(在本例中我使用了;
)结果为["44", "66", "44444", "6"]
stream().max(Comparator.comparingInt(String::length)).get()
获取最大输入
.length()
返回结果的长度
修改强>
我如何修改它,以计算任何特定数字。我的意思是,最大连续出现数字4
在这种情况下,您只需添加一个过滤器.filter(t -> t.matches(number + "+"))
,这意味着只获取与4+
匹配的数字,其中4可以是任意数字:
...
int number = 6;
int result = Arrays.asList(arrayTK.replaceAll("(\\d)((?!\\1|$))", "$1;$2").split(";"))
.stream()
.filter(t -> t.matches(number + "+"))
.max(Comparator.comparingInt(String::length)).get().length();