亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        C++實(shí)例(去除數(shù)組中的重復(fù)數(shù)字)

        字號:

        題目: 有一個(gè)數(shù)組t[100],存放了1~99之間的數(shù)字,用效率較高的代碼把重復(fù)數(shù)字去掉。例如數(shù)組{1,2,2,2,3,5,6,6}變成{1,2,3,5,6}。
            ××××××××××××××××××××××××××××××××××
            申請標(biāo)志數(shù)組
            此題重復(fù)的數(shù)字可能不只一個(gè),上述求和的方法不行了。因?yàn)槭歉咝?,我們可以采用空間換時(shí)間的策略來解決。
            設(shè)立訪問標(biāo)志數(shù)字,初始化為0,訪問到N時(shí)將標(biāo)志數(shù)字的第N個(gè)元素置為N
            最后遍歷該數(shù)組,若標(biāo)志數(shù)組中對應(yīng)值為非0,則順序存儲該數(shù)字于原數(shù)組中,最后返回去除重復(fù)數(shù)字后的有效數(shù)的個(gè)數(shù)
            int RemoveRep(int array[], int n)
            {
            int *arrayflag = (int *)malloc(n*sizeof(int));
            int left = 0, i = 0;
            while(i    arrayflag[i++] = false; //初始化標(biāo)志數(shù)組
            for(i=0;i    {
            arrayflag[array[i]] = array[i]; //將出現(xiàn)過的數(shù)保存到對應(yīng)的位置
            }
            for(i=0;i    {
            if(arrayflag[i] != false)
            array[left++] = arrayflag[i];
            }
            return left;
            }
            ××××××××××××××××××××××××××××××××××
            符號標(biāo)志法
            上述方法的空間復(fù)雜度為O(N),利用符號位作為標(biāo)志即可不申請O(N)標(biāo)志數(shù)組
            int SignedRemoveRep(int array[], int n)
            {
            int i,left = 0;
            for(i=0;i    {
            if(array[i] > 0)
            array[array[i]] = -array[array[i]];
            else
            array[-array[i]] = -array[-array[i]];
            }
            for(i=0;i    {
            if(array[i] < 0) //根據(jù)標(biāo)志順序保存出現(xiàn)過的值
            array[left++] = i;
            }
            return left;
            }
            ××××××××××××××××××××××××××××××××××
            void main(void)
            {
            int t[100];
            int i,j,left;
            for(i=0;i<100;i++) //隨機(jī)產(chǎn)生100個(gè)數(shù)字
            {
            j = rand()%99+1;
            t[i] = j;
            printf("%d ",t[i]);
            if(i%10 == 9)
            printf("\n");
            }
            //left = RemoveRep(t, 100);
            left = SignedRemoveRep(t, 100);
            for(i=0;i    {
            printf("%d ",t[i]);
            if(i%10 == 9)
            printf("\n");
            }
            }