<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    春風博客

    春天里,百花香...

    導航

    <2008年6月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    統計

    公告

    MAIL: junglesong@gmail.com
    MSN: junglesong_5@hotmail.com

    Locations of visitors to this page

    常用鏈接

    留言簿(11)

    隨筆分類(224)

    隨筆檔案(126)

    個人軟件下載

    我的其它博客

    我的鄰居們

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    使用位圖法判斷整形數組是否存在重復

    判斷集合中存在重復是常見編程任務之一,當集合中數據量比較大時我們通常希望少進行幾次掃描,這時雙重循環法就不可取了。

    位圖法比較適合于這種情況,它的做法是按照集合中最大元素max創建一個長度為max+1的新數組,然后再次掃描原數組,遇到幾就給新數組的第幾位置上1,如遇到5就給新數組的第六個元素置1,這樣下次再遇到5想置位時發現新數組的第六個元素已經是1了,這說明這次的數據肯定和以前的數據存在著重復。這種給新數組初始化時置零其后置一的做法類似于位圖的處理方法故稱位圖法。它的運算次數最壞的情況為2N。如果已知數組的最大值即能事先給新數組定長的話效率還能提高一倍。

    示例代碼如下:

    package com.sitinspring;

    /**
     * 數組重復探測,時間復雜度為O(n)
     * 
    @author: sitinspring(junglesong@gmail.com)
     * @date: 2008-6-18-上午03:24:07
     
    */

    public class DuplicatedArrayTest{
        
    public static void main(String[] args){
            
    int[][] arr={
                    
    {1,2,3,5,3,5,56,534,3,32},
                    
    {1,2,3,5},
                    
    {1,2,3,5,3,5},
                    
    {0,0,1,2,3,5,56,534,78,32},
            }
    ;
            
            
    for(int i=0;i<arr.length;i++){
                System.out.print(
    "數組:");
                
    for(int temp:arr[i]){
                    System.out.print(temp
    +",");
                }

                System.out.print(
    "");
                System.out.print(hasDuplicatedItem(arr[i])
    ?"存在":"不存在");
                System.out.print(
    "重復元素.\n");
            }

        }

        
        
    /**
         * 判斷整形數組中是否有重復數據,時間復雜度為O(n)
         * 
    @param arr
         * 
    @return
         
    */

        
    public static boolean hasDuplicatedItem(int[] arr){
            
    // 掃描數組找最大值
            int max=arr[0];        
            
    for(int i=1;i<arr.length;i++){
                
    if(arr[i]>max){
                    max
    =arr[i];
                }

            }

            
            
    // 按最大值創建一個新數組
            int[] bitArray=new int[max+1];
            
            
    // 按值向新數組中添值,如value為3則bitArray[3]=1
            for(int value:arr){
                
    if(bitArray[value]!=0){
                    
    // 如果value指向的位置已經不是零,說明之前已經給這一塊置1了,立即返回true表示數組有重復
                    return true;
                }

                
    else{
                    
    // value指向的位置是零,則置為1表示這一位已經有數存在了
                    bitArray[value]=1;
                }

            }
            
            
            
    return false;
        }

    }

    輸出:
    數組:1,2,3,5,3,5,56,534,3,32,中存在重復元素.
    數組:
    1,2,3,5,中不存在重復元素.
    數組:
    1,2,3,5,3,5,中存在重復元素.
    數組:
    0,0,1,2,3,5,56,534,78,32,中存在重復元素.

    題外話:
    今天法國真是太背了,為它送行吧!但愿它能早日迎來一個新的齊達內。

    posted on 2008-06-18 04:11 sitinspring 閱讀(1213) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    sitinspring(http://www.tkk7.com)原創,轉載請注明出處.
    主站蜘蛛池模板: 亚洲精品伦理熟女国产一区二区| 免费观看国产精品| 亚洲AV一宅男色影视| 日韩精品无码永久免费网站| 成人免费男女视频网站慢动作| 亚洲免费黄色网址| 免费AA片少妇人AA片直播| 亚洲最新中文字幕| 成人免费午夜无码视频| 亚洲最大天堂无码精品区| 女人被男人桶得好爽免费视频| 亚洲偷偷自拍高清| 日日夜夜精品免费视频| 国产亚洲精品国产福利在线观看| 国产免费直播在线观看视频| 看免费毛片天天看| 久久精品国产亚洲网站| 日韩插啊免费视频在线观看| 久久综合亚洲鲁鲁五月天| 青青视频观看免费99| 亚洲天然素人无码专区| 国产亚洲精品免费| 久久久久免费视频| 久久亚洲AV无码精品色午夜麻豆| 在线精品一卡乱码免费| 亚洲AⅤ男人的天堂在线观看| 亚洲精品99久久久久中文字幕| 久久久久免费视频| 国产成人精品日本亚洲专一区| 成在线人永久免费视频播放| 一个人免费观看视频在线中文| 亚洲福利在线视频| 成人免费男女视频网站慢动作| caoporn国产精品免费| 精品亚洲成a人片在线观看少妇| 成人毛片免费视频| 中文字幕a∨在线乱码免费看| 亚洲精品偷拍无码不卡av| 日本成人免费在线| 男人进去女人爽免费视频国产| 亚洲人成片在线观看|