日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Rearrange an array of positive and negative integers

發布時間:2024/9/30 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Rearrange an array of positive and negative integers 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Given an array of positive and negative integers, re-arrange it?
so that you have postives on one end and negatives on the other,?
BUT retain the original order of appearance.?

For eg. 1, 7, -5, 9, -12, 15 => -5, -12, 1, 7, 9, 15


可以使用塊交換技術實現題目要求,

1,7,-5 交換為 -5,1,7

然后

-5,1,7,9,-12 交換為 -5,-12,1,7,9


目測時間復雜度是o(n^2)

但是可以用遞歸將時間復雜度降維nlogn

http://haixiaoyang.wordpress.com/?s=Rearrange

有空可以研究下

//Given an array of positive and negative integers, //re-arrange it so that you have postives on one end //and negatives on the other, BUT retain the original order of appearance. do it in-place //e.g. 1, 7, -5, 9, -12, 15 => -5, -12, 1, 7, 9, 15//When considering optimization from O(n^2) to O(nlogn),use divided & conquer void swapRange(int a[], int nBeg, int nEnd) {assert(a && nBeg <= nEnd);while (nBeg < nEnd)swap(a[nBeg++], a[nEnd--]); }//solution: //e.g. in any stage: ---- "+++ --" ++++, reverse middle part // ==> ---- "--" "+++" ++++, reverse middle 2 parts seperatly to keep "stable" void ReArrange(int a[], int n) {assert(a && n > 0);if (n <= 1) return;ReArrange(a, n/2);ReArrange(a + n/2, n - n/2); //pitfall, notice both parametersint nLft = 0;while (a[nLft] < 0) nLft++;int nRgt = n-1;while (a[nRgt] >= 0)nRgt--;//Very important, no need to swap under this situation, returnif (nRgt <= nLft) return; swapRange(a, nLft, nRgt);int nBegRgt = nLft;while (a[nBegRgt] < 0) //no need to use "&& nBegRgt < n"nBegRgt++;swapRange(a, nLft, nBegRgt-1);swapRange(a, nBegRgt, nRgt); }

總結

以上是生活随笔為你收集整理的Rearrange an array of positive and negative integers的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。