最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言找出數(shù)組中的特定元素的算法解析

 更新時間:2016年03月15日 17:44:04   作者:wuzhekai1985  
這篇文章主要介紹了C語言中找出數(shù)組中特定元素的算法解析,包括找出數(shù)組中兩個只出現(xiàn)一次的數(shù)字的方法,需要的朋友可以參考下

     問題描述:一個int數(shù)組,里面數(shù)據(jù)無任何限制,要求求出所有這樣的數(shù)a[i],其左邊的數(shù)都小于等于它,右邊的數(shù)都大于等于它。能否只用一個額外數(shù)組和少量其它空間實現(xiàn)。
      思路:如果能用兩個輔助數(shù)組,那么相對來說簡單一點,可定義數(shù)組Min和數(shù)組Max,其中Min[i]表示自a[i]之后的最小值(包括a[i]),Max[i]表示自a[i]之前元素的最大值。有了這兩個輔助數(shù)組后,對于a[i],如果它大于Max[i-1]并且小于Min[i+1],那么就符合要求。
      但是題目要求是只用一個額外數(shù)組,其實Max數(shù)組可以省去,完全可以邊判斷邊計算,這是因為Max[i]是自左往右計算的,而判斷時也是自左往右,兩個過程正好可以合起來。只需用一個變量Max保存一下當(dāng)前的最大值即可。下面給出兩種方法的代碼實現(xiàn)。
      參考代碼:

//函數(shù)功能 : 找元素 
//函數(shù)參數(shù) : pArray指向數(shù)組,len為數(shù)組的元素個數(shù) 
//返回值 : 無 
void FindElements_Solution1(int *pArray, int len) 
{ 
  if(pArray == NULL || len <= 0 ) 
    return ; 
 
  int *pMin = new int[len]; 
  int *pMax = new int[len]; 
  int i; 
 
  pMax[0] = pArray[0]; 
  for(i = 1; i < len; i++)    //計算自i往前最大值的輔助數(shù)組 
    pMax[i] = (pMax[i-1] >= pArray[i])? pMax[i-1]: pArray[i]; 
  pMin[len-1] = pArray[len-1]; 
  for(i = len - 2; i >= 0; i--) //計算自i開始最小值的輔助數(shù)組 
    pMin[i] = (pMin[i+1] <= pArray[i])? pMin[i+1]: pArray[i]; 
 
  if(pArray[0] <= pMin[0])   //檢查第1個元素是否滿足條件 
    cout<<pArray[0]<<' '; 
  for(i = 1; i < len - 1; i++) 
  { 
    if(pArray[i] >= pMax[i-1] && pArray[i] <=pMin[i+1]) //滿足這個關(guān)系式的元素符合要求 
      cout<<pArray[i]<<' '; 
  } 
  if(pArray[len-1] >= pMax[len-1]) //檢查第len個元素是否滿足條件 
    cout<<pArray[i]; 
  cout<<endl; 
 
  delete [] pMin; 
  delete [] pMax; 
  pMin = pMax = NULL; 
} 

void FindElements_Solution2(int *pArray, int len) 
{ 
  if(pArray == NULL || len <= 0 ) 
    return ; 
 
  int *pMin = new int[len]; 
  int Max; 
  int i; 
 
  Max = pArray[0]; 
  pMin[len-1] = pArray[len-1]; 
  for(i = len - 2; i >= 0; i--) //計算自i開始最小值的輔助數(shù)組 
    pMin[i] = (pMin[i+1] <= pArray[i])? pMin[i+1]: pArray[i]; 
 
  if(pArray[0] <= pMin[0])   //檢查第1個元素是否滿足條件 
    cout<<pArray[0]<<' '; 
 
  for(i = 1; i < len - 1; i++) 
  { 
    if(pArray[i] >= Max && pArray[i] <=pMin[i+1]) //滿足這個關(guān)系式的元素符合要求 
      cout<<pArray[i]<<' '; 
    Max = (Max < pArray[i])? pArray[i]: Max; //更新當(dāng)前最大值 
  } 
  if(pArray[len-1] >= Max) //檢查第len個元素是否滿足條件 
    cout<<pArray[i]; 
  cout<<endl; 
 
  delete [] pMin; 
  pMin = NULL; 
} 

找出數(shù)組中兩個只出現(xiàn)一次的數(shù)字(數(shù)組)
 問題描述:一個整型數(shù)組里除了兩個數(shù)字之外,其他的數(shù)字都出現(xiàn)了兩次。請寫程序找出這兩個只出現(xiàn)一次的數(shù)字。要求時間復(fù)雜度是O(n),空間復(fù)雜度是O(1)。
     思路:如果只有一個數(shù)字只出現(xiàn)一次,而其他都出現(xiàn)兩次,則直接將所有數(shù)字做一次異或運算即可,因為相等的數(shù)字異或一下結(jié)果為0。如果有兩個數(shù)字只出現(xiàn)一次,而其他數(shù)字出現(xiàn)了兩次。該怎么辦呢?《編程之美》一書提供了一種方法,即先將所有數(shù)字做一次異或運算,得到一個數(shù)字,然后以該數(shù)字的某非0位作為過濾位,將數(shù)組分成兩個部分,此時只出現(xiàn)一次的數(shù)字會被分到不同的部分?,F(xiàn)在問題就轉(zhuǎn)為只出現(xiàn)一次的情況,對每部分分別做異或運算即可。
     參考代碼:

//函數(shù)功能 : 找出數(shù)組中兩個只出現(xiàn)一次的數(shù)字 
//函數(shù)參數(shù) : arr為源數(shù)組,len為數(shù)組元素個數(shù),result用來存放結(jié)果  
//返回值 :  無 
void FindIsolateTwo(int *arr, int len, int *result) 
{ 
  int i, all = 0, flag = 1; 
 
  for(i = 0; i < len ; i++) //所有數(shù)異或 
    all ^= arr[i]; 
 
  while(!(all&flag)) //尋找過濾位 
    flag <<= 1; 
 
  result[0] = result[1] = 0; 
  for(i = 0; i < len; i++) //利用過濾位區(qū)分 
  { 
    if(flag&arr[i]) 
      result[0] ^= arr[i]; 
    else 
      result[1] ^= arr[i]; 
  } 
} 

相關(guān)文章

  • C/C++語言printf命令使用方法

    C/C++語言printf命令使用方法

    在本篇文章里小編給大家分享了關(guān)于C/C++語言printf命令使用方法和步驟,對此有需要的朋友們學(xué)習(xí)下。
    2019-01-01
  • VC++實現(xiàn)輸出GIF到窗體并顯示GIF動畫的方法

    VC++實現(xiàn)輸出GIF到窗體并顯示GIF動畫的方法

    這篇文章主要介紹了VC++實現(xiàn)輸出GIF到窗體并顯示GIF動畫的方法,需要的朋友可以參考下
    2014-07-07
  • C++泛型編程綜合講解

    C++泛型編程綜合講解

    泛型編程與面向?qū)ο缶幊痰哪繕?biāo)相同,即使重用代碼和抽象通用概念的技術(shù)更加簡單。但是面向?qū)ο缶幊虖娬{(diào)編程的數(shù)據(jù)方面,泛型編程強調(diào)的是獨立于特定數(shù)據(jù)類型
    2022-12-12
  • C語言實現(xiàn)騎士飛行棋小游戲

    C語言實現(xiàn)騎士飛行棋小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)騎士飛行棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 變量定義與聲明的區(qū)別詳細解析

    變量定義與聲明的區(qū)別詳細解析

    外部變量(全局變量)的"定義"與外部變量的"聲明"是不相同的,外部變量的定義只能有一次,它的位置是在所有函數(shù)之外,而同一個文件中的外部變量聲明可以是多次的,它可以在函數(shù)之內(nèi)(哪個函數(shù)要用就在那個函數(shù)中聲明)也可以在函數(shù)之外(在外部變量的定義點之前)
    2013-09-09
  • VC++開發(fā)中完美解決頭文件相互包含問題的方法解析

    VC++開發(fā)中完美解決頭文件相互包含問題的方法解析

    本文中,為了敘述方便,把class AClass;語句成為類AClass的聲明,把class AClass開始的對AClass的類成員變量、成員函數(shù)原型等的說明稱為類的定義,而把在CPP中的部分稱為類的定義
    2013-09-09
  • C語言實現(xiàn)輸入兩個數(shù)字將其按從小到大輸出的方法

    C語言實現(xiàn)輸入兩個數(shù)字將其按從小到大輸出的方法

    這篇文章主要介紹了C語言實現(xiàn)輸入兩個數(shù)字將其按從小到大輸出的方法,本文通過代碼講解的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 實例代碼講解c++ 繼承特性

    實例代碼講解c++ 繼承特性

    這篇文章主要介紹了c++ 繼承特性的相關(guān)資料,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • c++ 寫注冊表方式讓程序開機自啟動

    c++ 寫注冊表方式讓程序開機自啟動

    這篇文章主要介紹了c++ 寫注冊表方式讓程序開機自啟動,需要的朋友可以參考下
    2017-09-09
  • 解析c語言中"函數(shù)調(diào)用中缺少哨兵"的情況分析

    解析c語言中"函數(shù)調(diào)用中缺少哨兵"的情況分析

    本篇文章是對c語言中"函數(shù)調(diào)用中缺少哨兵"的情況進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

本溪| 谷城县| 阿克陶县| 阿拉善左旗| 平阴县| 龙岩市| 集安市| 故城县| 洛浦县| 廉江市| 漠河县| 万盛区| 宜丰县| 黄大仙区| 黄平县| 项城市| 礼泉县| 来凤县| 彩票| 平潭县| 通江县| 中西区| 九江县| 丹棱县| 仲巴县| 阿瓦提县| 南开区| 海城市| 黄梅县| 招远市| 宣汉县| 竹山县| 奉节县| 乳山市| 寿阳县| 吴桥县| 库车县| 汉寿县| 淮北市| 宽城| 凤山县|