李敏  
日历
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
统计
  • 随笔 - 1
  • 文章 - 40
  • 评论 - 4
  • 引用 - 0

导航

常用链接

留言簿(1)

文章分类

文章档案

相册

收藏夹

它山之石

聚贤庄

搜索

  •  

最新评论

 
需求:
从数组A和数组B中找出相同的数(每个数组中没有重复数)

思路:
1  借鉴查表法,把每个数组中数值映射成一个大数组的下标值。
2  然后遍历两个目标数组,对映射到的大数组中的值进行累加。
3  最后遍历大数组,得到数值=2的那些索引,即两个数组中相同的数。
4  大数组的长度为数组A和数组B中最大的那个数

模块:
Demo.java 统计
public void twoArrayNumCount() 对两个数组进行统计
public getArrayNumCount():int [] 返回统计的结果
private void initTableArray() 初始化统计数组
private void arrayNumCount(array:int []) 统计一个数组中的每个数字的个数

ArrayPrint.java 打印
void print(array:int []) 打印统计好的数组(整个数组中数值等于2的数组索引)

ArrayUtil.java 数组处理
public static getArrayMaxNum(int [] array):int 查找一个数组中的最大数
public static getTwoArrayMaxNum(int [] array1,int []array2):int 求出两个数组中的最大数

测试
TestDemo.java 测试统计(Demo.java)
TestArrayUtil.java 测试数组处理(ArrayUtil.java)
TestArrayPrint.java 测试打印(ArrayPrint.java)


主功能模块实现:
(一)构造大数组
用两个数组中的那个最大数来设定大数组的长度
查找数组中的最大数
(二)统计
遍历两个数组,对大数组索引(两个数组的值)进行累加


代码:
Demo.java
/**
 * 统计
 * 
 * 
@author MinLi
 * 
 
*/

public class Demo {
    
// 统计数组
    private int[] tableArray;

    
private int[] array1;

    
private int[] array2;

    
public Demo(int[] array1, int[] array2) {
        
this.array1 = array1;

        
this.array2 = array2;

        initTableArray();
    }


    
/**
     * 初始化统计数组(这里它的长度是由两个数组中的最大值+1)
     
*/

    
private void initTableArray() {
        
int arrayMaxNum = ArrayUtil.getTwoArrayMaxNum(array1, array2);

        tableArray 
= new int[arrayMaxNum + 1];
    }


    
/** */
    
/**
     * 统计一个数组中的每个数字的个数
     
*/

    
private void arrayNumCount(int[] array) {
        
for (int num : array) {
            tableArray[num] 
+= 1;
        }

    }


    
/**
     * 返回统计的结果
     * 
     * 
@return
     
*/

    
public int[] getArrayNumCount() {
        
return tableArray;
    }


    
/**
     * 统计两个数组中的每个数字的个数
     * 
     * 
@param array1
     * 
@param array2
     
*/

    
public void twoArrayNumCount() {
        arrayNumCount(array1);

        arrayNumCount(array2);
    }

}

ArrayUtil.java
/**
 * 数组处理
 * 
 * 
@author MinLi
 * 
 
*/

public class ArrayUtil {
    
/** */
    
/**
     * 查找一个数组中的最大数
     
*/

    
public static int getArrayMaxNum(int[] array) {
        
int max = array[0];

        
for (int num : array) {
            
if (max < num)
                max 
= num;
        }

        
return max;
    }


    
/** */
    
/**
     * 求出两个数组中的最大数
     
*/

    
public static int getTwoArrayMaxNum(int[] array1, int[] array2) {
        
int array1Max = getArrayMaxNum(array1);

        
int array2Max = getArrayMaxNum(array2);

        
return array1Max > array2Max ? array1Max : array2Max;
    }

}


ArrayPrint.java
/**
 * 数组打印
 * 
 * 
@author MinLi
 * 
 
*/

public class ArrayPrint {
    
/**
     * 打印整个数组中值等于2的数组索引
     * 
     * 
@param array
     
*/

    
public static void print(int[] array) {
        
int arrayLength = array.length;

        
for (int index = 0; index < arrayLength; index++{
            
int num = array[index];

            
if (num == 2)
                System.out.println(index);
        }

    }

}


TestDemo.java
/**
 * 测试Demo类
 * 
 * 
@author MinLi
 * 
 
*/

public class TestDemo {
    
private void service() {

        test_arrayNumCount();

        test_twoArrayNumCount();
    }


    
/** */
    
/**
     * 测试twoArrayNumCount方法
     
*/

    
private void test_twoArrayNumCount() {
        
int array1[] = 1311 };
        
int array2[] = 39 };

        Demo demo 
= new Demo(array1, array2);

        demo.twoArrayNumCount();

        
int[] tableArray = demo.getArrayNumCount();

        ArrayPrint.print(tableArray);
    }


    
/** */
    
/**
     * 测试arrayNumCount方法
     
*/

    
private void test_arrayNumCount() {
        
int array1[] = 1311 };
        
int array2[] = 29 };

        
// 这里为了测试把arrayNumCount方法设为public
        /** */
        
/**
         * Demo demo = new Demo(array1, array2);
         * 
         * demo.arrayNumCount(array1);
         * 
         * int[] tableArray = demo.getArrayNumCount();
         * 
         * ArrayPrint.print(tableArray);
         
*/

    }


    
public static void main(String[] args) {
        
new TestDemo().service();
    }

}


TestArrayUtil.java
/**
 * 测试ArrayUtil类
 * 
 * 
@author MinLi
 * 
 
*/

public class TestArrayUtil {

    
public static void main(String[] args) {
        
new TestArrayUtil().service();
    }


    
private void service() {
        test_getTwoArrayMaxNum();

        test_getArrayMaxNum();
    }


    
/** */
    
/**
     * 测试ArrayUtil类中的getArrayMaxNum方法
     
*/

    
private void test_getArrayMaxNum() {
        
int arrays[] = 136 };

        System.out.println(ArrayUtil.getArrayMaxNum(arrays));
    }


    
private void test_getTwoArrayMaxNum() {
        
int array1[] = 1311 };
        
int array2[] = 29 };

        
int maxNum = ArrayUtil.getTwoArrayMaxNum(array1, array2);

        System.out.println(maxNum);
    }

}


TestArrayPrint.java
/**
 * 测试ArrayPrint类
 * 
 * 
@author MinLi
 * 
 
*/

public class TestArrayPrint {

    
public static void main(String[] args) {
        
new TestArrayPrint().service();
    }


    
private void service() {
        test_print();
    }


    
/** */
    
/**
     * 测试ArrayPrint类中的print方法
     
*/

    
private void test_print() {
        
int array1[] = 112 };

        ArrayPrint.print(array1);
    }

}

posted on 2010-09-08 22:12 李敏 阅读(3300) 评论(0)  编辑  收藏 所属分类: 算法

只有注册用户登录后才能发表评论。


网站导航:
 
 
Copyright © 李敏 Powered by: 博客园 模板提供:沪江博客