我正在研究算法,我需要能够传入一个List,看看列表中的任何一行是否有四个数字。
我一直在努力做一个简单的方法...这是基本的想法..我希望fourNumbersInARow()方法返回true:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Numbers {
/**
* @param args
*/
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<Integer>();
for(int i = 0; i<10; i++){
numbers.add((new Random().nextInt()));
}
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
System.out.println(fourNumbersInARow());
}
private static boolean fourNumbersInARow() {
}
}
答案 0 :(得分:7)
使用两个变量:last_value
和row_count
。逐个浏览列表,总是查看当前值是否恰好大于last_value
;如果是,请增加row_count
,如果不是,请将其重置为1
。在任何情况下,将last_value
设置为当前值并循环。如果row_count
在任何时候变为4
,请返回true
。如果您到达列表末尾,请返回false
。
编辑:将计数器范围更改为从1开始
答案 1 :(得分:1)
在伪代码中:
consecutiveCount = 1
lastNumber = firstElementInList(list)
for (number in list.fromSecondElement()):
if (number - lastNumber == 1):
consecutiveCount++
else:
consecutiveCount = 1
if (consecutiveCount == 4):
return true
lastNumber = number
return false
最重要的是,您需要跟踪列表中的最后一个数字,并将其与当前数字进行比较,以查看差异是否为1.为了记住最后一个数字,需要lastNumber
之类的变量。
然后,为了跟踪已经有多少个连续数字,也应该有一个计数器,在示例中约为consecutiveCount
。
当发生四个连续数字的条件时,该方法应返回true
。
答案 2 :(得分:1)
这是Java中的一个实现。
static boolean fourNumbersInARow(List<Integer> list) {
int last = 0xFACADE; // can be any number
int count = 0; // important!
for (int i : list) {
if (i == last + 1) {
if (++count == 4) return true;
} else {
count = 1;
}
last = i;
}
return false;
}
与其他人不同,当序列被破坏时,这将一行中的数字计数重置为1
(因为一个数字本身就是1
个数字)。这允许更容易地处理第一次迭代,其中技术上没有先前的数字。
答案 3 :(得分:0)
这听起来有点像家庭作业问题,所以我不想写出完整的解决方案。但是在你的方法中只需遍历列表。取第一个数字,看看下一个数字是否在当前之后,如果是,则设置一个带有起始位置和当前数字的变量标志,在下一次迭代中通过循环检查以查看该值是否在前一个值之前等等......一旦找到连续四个,就跳出循环并返回true。如果您遇到一个没有按时间顺序排列的数字,请将标志(起始位置)设置为空或负数,然后从列表中的当前位置开始处理。
答案 4 :(得分:0)
检查此代码,如果有4个数字的序列,则返回true,否则返回false
public class FindFourSequence {
public boolean isFourinRow(ArrayList seqList) {
boolean flag = false;
int tempValue = 0;
int tempValue2 = 0;
int tempValue3 = 0;
int tempValue4 = 0;
Iterator iter = seqList.iterator();
while(iter.hasNext()){
String s1 = (String)iter.next();
tempValue=Integer.valueOf(s1).intValue();
if(!(iter.hasNext())){
break;
}
String s2 = (String)iter.next();
tempValue2=Integer.valueOf(s2).intValue();
if(((tempValue2-tempValue)==1) || (tempValue-tempValue2)==1){
if(!(iter.hasNext())){
break;
}
String s3 = (String)iter.next();
tempValue3=Integer.valueOf(s3).intValue();
if((tempValue3-tempValue2)==1 || (tempValue2-tempValue3)==1){
if(!(iter.hasNext())){
break;
}
String s4 = (String)iter.next();
tempValue4=Integer.valueOf(s4).intValue();
if((tempValue3-tempValue4==1) || (tempValue4-tempValue3)==1){
flag = true;
return flag;
}
}
}
}
return flag;
}
public static void main(String[] args) throws Exception {
ArrayList aList = new ArrayList();
boolean flag = false;
FindFourSequence example = new FindFourSequence();
Random random = new Random();
for (int k = 0; k < 25; k++) {
int number = random.nextInt(20);
System.out.println(" the Number is :" + number);
aList.add("" + number);
}
/* aList.add("" + 1);
aList.add("" + 2);
aList.add("" + 3);
aList.add("" + 4);*/
flag = example.isFourinRow(aList);
System.out.println(" the result value is : " + flag);
}
}