李敏  
          日歷
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345
          統計
          • 隨筆 - 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 李敏 閱讀(3332) 評論(0)  編輯  收藏 所屬分類: 算法
           
          Copyright © 李敏 Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 新郑市| 商南县| 和龙市| 紫金县| 伊宁市| 普兰县| 阿克| 北辰区| 阿巴嘎旗| 凭祥市| 海宁市| 民权县| 湾仔区| 兴安盟| 晋城| 隆尧县| 额济纳旗| 双辽市| 嘉定区| 佛山市| 武冈市| 古交市| 富源县| 枣阳市| 崇仁县| 赤峰市| 渝中区| 乌审旗| 炎陵县| 尉犁县| 石首市| 苏尼特左旗| 通化县| 铜鼓县| 大竹县| 邵武市| 南平市| 崇仁县| 商丘市| 璧山县| 马龙县|