欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言計算連續(xù)無序數(shù)組中缺省數(shù)字方法詳解

 更新時間:2023年02月08日 16:02:18   作者:36°熨斗的焦慮日記  
這篇文章主要介紹了C語言計算連續(xù)無序數(shù)組中缺省數(shù)字方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧

求缺省數(shù)字時可以使用異或進行求解,時間復雜度為O(N)。

我們都知道,異或的特點就是相同為0,相異為1 ,比如:

這是3和3相異或的結果,為0, 同樣地,有4^4 = 0,5^5 = 0等等……

這也是我們思考這道題的出發(fā)點:

既然相同異或就為0,那么我們是不是只要將此數(shù)組與一個完整數(shù)組(個人習慣稱為完全數(shù)組)挨個求異或,相同的數(shù)字就會被異或沒,剩下的那個數(shù)字(這個數(shù)字是在完全數(shù)組中留下的)是不是就是題給數(shù)組的缺省數(shù)字?

答案是肯定的:

此時剩下的數(shù)字就是4即為所求。

但是我們怎么樣用代碼去實現(xiàn)呢?

本質上是兩兩求異或,非要兩個數(shù)組的數(shù)字對應相異或嗎?(1-1,2-2,3-3,5-5,6-6,7-7)

我們可以很快的實現(xiàn)一個完全數(shù)組的創(chuàng)建,找到缺省數(shù)組的最小值,往后加(N+1)個數(shù)便可得到,但是如果題給的數(shù)組是亂序呢?我們無法做到一一對應去求異或。

于是,奇妙的異或運算便替我們省去了很多步驟。

異或運算是有交換律的,即:a⊕b = b⊕a;

難理解的話我們來看一個例子:

假如現(xiàn)在有一個數(shù)組:{1,2,1,3,4};其中有兩個 1 重復了,我已如果對這個數(shù)組進行兩兩異或結果是不是應該為2^3^4的值呢?

很顯然,異或消去相同數(shù)并不需要對應,只要讓這個數(shù)字最終和一個跟它相同的數(shù)字異或就可以消去;所以,我們可以將完全數(shù)組與缺省數(shù)組混合起來成為一個數(shù)組兩兩異或,就可以求出那個缺省數(shù)字。

思想就是這個樣子,但是在實現(xiàn)時,如果要將兩個數(shù)組合并為一個數(shù)組又得有多余的步驟,所以我的做法是將兩個數(shù)組各自兩兩異或、得到結果A和結果B;再將A與B異或得到缺省數(shù)字。

拙解

#include <stdio.h>
int fun(int arr[], int len);
int main() 
{
    int arr[] = { 78, 79, 81, 83, 82, 84 };
    int len = sizeof(arr) / sizeof(arr[0]);
    int res = fun(arr, len);
    printf("%d\n", res);
    return 0;
}
int fun(int arr[], int len)
{
    int i, j;
    int temp1 = 0, temp2 = 0;
    int min = arr[0];
    //確定完全數(shù)組起始值
    for (i = 0; i < len; i++)
    {
        if (arr[i] < min)
        {
            min = arr[i];
        }
    }
    //對完全數(shù)組進行異或
    for (j = min; j < (len + 1)+min; j++)
    {
        temp1 ^= j;
    }
    //對原始(缺數(shù))數(shù)組進行異或
    for (i = 0; i < len; i++)
    {
        temp2 ^= arr[i];
    }
    int res = temp1 ^ temp2;
    return res;
}

到此這篇關于C語言計算連續(xù)無序數(shù)組中缺省數(shù)字方法詳解的文章就介紹到這了,更多相關C語言無序數(shù)組中缺省數(shù)字內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++11中異常處理機制詳解

    C++11中異常處理機制詳解

    傳統(tǒng)的C語言處理異常的方式有兩種:終止程序和返回錯誤碼。在實際中的C語言程序基本都是通過返回錯誤碼的方式來處理錯誤的,部分情況下使用終止程序來處理比較嚴重的錯誤。本文將通過示例和大家聊聊C++11中異常處理機制,需要的可以參考一下
    2022-09-09
  • C語言中冒泡排序算法詳解

    C語言中冒泡排序算法詳解

    大家好,本篇文章主要講的是C語言中冒泡排序算法詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C++11、C++14、C++17、C++20常用新特性

    C++11、C++14、C++17、C++20常用新特性

    本文主要介紹了C++11、C++14、C++17、C++20常用新特性,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • C++?超詳細梳理繼承的概念與使用

    C++?超詳細梳理繼承的概念與使用

    這篇文章主要介紹了C++?多繼承詳情,C++支持多繼承,即允許一個類同時繼承多個類。只有C++等少數(shù)語言支持多繼承,下面我們就來看看具體的多繼承介紹吧,需要的朋友可以參考一下
    2022-03-03
  • 淺談C結構和C++結構之間的區(qū)別

    淺談C結構和C++結構之間的區(qū)別

    這篇文章主要介紹了淺談C結構和C++結構之間的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • C++11?關鍵字?const?使用小結

    C++11?關鍵字?const?使用小結

    const大致意思是“我承諾不改變這個值”。主要用于說明接口,這樣在把變量傳入函數(shù)時就不必擔心變量會在函數(shù)內被改變,本文給大家介紹C++11?關鍵字?const?使用小結,感興趣的朋友一起看看吧
    2021-12-12
  • 斐波那契數(shù)列 優(yōu)化矩陣求法實例

    斐波那契數(shù)列 優(yōu)化矩陣求法實例

    斐波那契數(shù)列 優(yōu)化矩陣求法實例,需要的朋友可以參考一下
    2013-03-03
  • C語言 枚舉類型(Enum)詳解及示例代碼

    C語言 枚舉類型(Enum)詳解及示例代碼

    本文主要介紹C語言 枚舉類型,這里提供了詳細的相關資料及示例代碼,以便大家學習參考,有興趣的小伙伴可以參考下
    2016-08-08
  • C++實現(xiàn)LeetCode(59.螺旋矩陣之二)

    C++實現(xiàn)LeetCode(59.螺旋矩陣之二)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(59.螺旋矩陣之二),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C++實現(xiàn)俄羅斯方塊源碼

    C++實現(xiàn)俄羅斯方塊源碼

    這篇文章主要為大家詳細介紹了C++實現(xiàn)俄羅斯方塊源碼完整版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評論