连续查找数字?

时间:2010-03-07 05:45:28

标签: java algorithm list

我正在研究算法,我需要能够传入一个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() {


    }

}

5 个答案:

答案 0 :(得分:7)

使用两个变量:last_valuerow_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);

    }
}