日期:2014-05-20  浏览次数:20744 次

新手遇到一个关于数组的问题,求解。。。。。
刚刚学习写程序不久,碰到这个数组的问题弄了很久一点主意都没有。

多谢各位大侠了:)

问题的要求是要建立一个method来比较两个数组,返回值(也是一个数组)需要是一个数组能全部大于另外一个数组的位置。

可能我的语言表达能力有限,举个例子。

例如:
数组F 包含数字:[3, 1, 2, 3, 4, 3, 1, 3, 3, 2, 0, 1, 0]。按照顺序在直角坐标系上表示出来如下图:


另外一个数组B 包含数字:[2, 3, 1]


现在将数组B的图像放入F数组的图像中并向右移动,这个method要做的工作就是比较数组B和F:如果B在某个位置(B数组图像在能够满足条件下第一个数字的位置将被记为B数组的位置)可能完全被F遮住,将这个位置记录下来作为返回值。


例如在上图我们可以很容易的发现在位置(记为数组H)[2, 3, 4, 7] F数组的图像恰好能完全遮住数组B的图像(这个数组将被作为返回值)。


011-10-13 02:35:08






------解决方案--------------------
最简单的做法,二重循环,子数组中所有元素全部小于等于大数组就OK了。
------解决方案--------------------
Java code
public static int getWeiZhi(int[] a,int[] b){
        
        if(a.length>=b.length){
            for(int i=0;i<a.length;i++){
                for(int j=0;j<b.length;j++){
                    if(a[i+j]<b[j]){
                        break;
                    }else{
                        if(j==b.length-1){
                            return i;
                        }
                    }
                }
            }
        }else{
            getWeiZhi(b, a);
        }
        return 0;
    }

    public static void main(String[] args) {
        int[] a={3, 1, 2, 3, 4, 3, 1, 3, 3, 2, 0, 1, 0};
        int[] b={2, 3, 1};
        System.out.println(getWeiZhi(a,b));
        for(int i=2;i<b.length+2;i++){
            System.out.print(a[i]+",");
        }
    }