亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

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

2020-01-26 14:40:32
字體:
來源:轉載
供稿:網友

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

//函數功能 : 找元素 //函數參數 : pArray指向數組,len為數組的元素個數 //返回值 : 無 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往前最大值的輔助數組     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開始最小值的輔助數組     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]) //滿足這個關系式的元素符合要求       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開始最小值的輔助數組     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]) //滿足這個關系式的元素符合要求       cout<<pArray[i]<<' ';     Max = (Max < pArray[i])? pArray[i]: Max; //更新當前最大值   }   if(pArray[len-1] >= Max) //檢查第len個元素是否滿足條件     cout<<pArray[i];   cout<<endl;    delete [] pMin;   pMin = NULL; } 

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩大片免费观看视频播放| 国产精品成人久久久久| 中文字幕久久精品| 国产精品影片在线观看| 欧美性猛交xxxx偷拍洗澡| 欧美精品18videos性欧| 午夜精品久久久久久久99热浪潮| 亚洲区免费影片| 欧美久久精品一级黑人c片| 国产精品美女主播在线观看纯欲| 久久久久久久一区二区| 91精品国产乱码久久久久久久久| 欧美高清一级大片| 欧美综合在线第二页| 久久免费福利视频| 日韩精品免费在线观看| 日韩美女av在线| 在线观看视频亚洲| 亚洲欧美另类自拍| 欧美在线激情网| 亚洲影影院av| 欧美午夜性色大片在线观看| 亚洲国产另类 国产精品国产免费| 亚洲美女在线观看| 国产一级揄自揄精品视频| 精品福利樱桃av导航| 91超碰中文字幕久久精品| 成人xvideos免费视频| 国产日韩视频在线观看| 国产一区欧美二区三区| 91在线精品播放| 亚洲欧美国产va在线影院| 青青草原成人在线视频| 丝袜一区二区三区| 亚洲精品网址在线观看| 久久成人人人人精品欧| 国产精品极品尤物在线观看| 亚洲电影免费观看高清| 亚洲大胆人体av| 日韩电影免费在线观看| 亚洲女人天堂色在线7777| 亚洲一区二区中文字幕| 亚洲国产精品系列| 日韩精品高清在线观看| 欧美肥婆姓交大片| 国产不卡视频在线| 欧美色欧美亚洲高清在线视频| 欧美精品久久久久久久久| 大量国产精品视频| 日韩美女视频中文字幕| 欧美性猛交xxxx乱大交蜜桃| 国产欧美在线看| 国产成人一区二区三区小说| 岛国av一区二区在线在线观看| 亚洲精品乱码久久久久久金桔影视| 久久久久亚洲精品成人网小说| 亚洲欧洲日本专区| 亚洲国产一区自拍| 爽爽爽爽爽爽爽成人免费观看| 欧美激情乱人伦一区| 国产精品久久久久久久久影视| 国外视频精品毛片| 亚洲色图在线观看| 美女扒开尿口让男人操亚洲视频网站| 国产欧美精品日韩精品| 亚洲精品永久免费精品| 国产91精品久久久久久| 91国自产精品中文字幕亚洲| 国产99久久精品一区二区| 国产欧美日韩免费| 国产精品久久中文| 成人在线视频福利| 日韩中文字幕精品视频| 成人精品aaaa网站| 欧美精品日韩三级| 国产成人综合精品在线| 亚洲成人中文字幕| 成人做爰www免费看视频网站| 国产精品一区二区三| 日本欧美爱爱爱| 深夜福利亚洲导航| 亚洲一区二区三区sesese| 欧美日韩亚洲精品一区二区三区| 97色在线视频| 日韩精品免费在线视频观看| 午夜剧场成人观在线视频免费观看| 欧美精品久久一区二区| 亚洲第一男人天堂| 国产精品久久久久久久久久尿| 亚洲人高潮女人毛茸茸| 国产99久久精品一区二区| 日韩免费av片在线观看| 亚洲变态欧美另类捆绑| 亚洲va欧美va国产综合剧情| 日韩视频在线观看免费| 欧美成人性生活| 欧美一级大胆视频| 成人在线小视频| 精品久久久久久久久久久久久久| 国产精品电影久久久久电影网| 国产综合在线看| 亚洲免费小视频| 欧美人与物videos| 久久久99久久精品女同性| 国产视频综合在线| 成人97在线观看视频| 91午夜在线播放| 久久精品国产91精品亚洲| 亚洲国产中文字幕在线观看| 欧美一区二区三区免费观看| 欧美激情亚洲另类| 精品久久久视频| 色香阁99久久精品久久久| 久久免费少妇高潮久久精品99| 国产精品老女人精品视频| 欧美性猛交xxxx乱大交极品| 97在线视频精品| 欧美性在线视频| 91精品成人久久| 国产精品亚洲视频在线观看| 性欧美暴力猛交69hd| 亚洲精品久久久久中文字幕欢迎你| 国产成人精品久久亚洲高清不卡| 亚洲精品wwww| 欧美视频一区二区三区…| 欧洲午夜精品久久久| 91亚洲永久免费精品| 51精品国产黑色丝袜高跟鞋| 在线中文字幕日韩| 国产日韩欧美一二三区| 亚洲成人激情在线| 欧美孕妇毛茸茸xxxx| 欧美黑人巨大精品一区二区| 最近中文字幕日韩精品| 国产亚洲精品久久| 亚洲精品在线视频| 欧美日韩爱爱视频| 日本精品免费一区二区三区| 97精品一区二区视频在线观看| 2019中文字幕在线免费观看| 日韩久久免费电影| 91精品国产91久久久久久吃药| 精品国产欧美一区二区三区成人| 欧美性xxxxxxx| 亚洲精品欧美极品| 久久全国免费视频| 97在线视频观看| 91亚洲va在线va天堂va国| 欧美亚洲一区在线| 成人黄色片网站| 欧美丰满少妇xxxxx| 亚洲成**性毛茸茸| 亚洲天堂网站在线观看视频| 亚洲欧美日本精品| 91大神福利视频在线| 久久精品视频中文字幕| 亚洲男人天堂手机在线| 色偷偷噜噜噜亚洲男人| 亚洲精品中文字幕有码专区| 中文字幕亚洲欧美日韩2019| 成人免费视频97| 久久免费精品视频| 国产亚洲精品久久久久动| 91精品国产高清久久久久久|