《劍指offer》 調整數組順序使得奇數在偶數前面
阿新 • • 發佈:2019-04-28
移動 urn void array col result 輸入 函數 整數
本題來自《劍指offer》 調整數組順序使得奇數在偶數前面
題目:
輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。
思路:
假設程序功能是黑盒子,現在考慮輸入和輸出。
輸入:【1,2,3,4,5,6】,數組為空,只有一個元素
輸出:題目要求相對位置不變,【1,3,5,2,4,6】代碼一實現,需要借助輔助內存。
若位置可以變,【1,5,3,4,2,6】 代碼二實現,前後指針遍歷,前面的偶數和後面的奇數互換即可
C++ Code(2):
class Solution { public: void reOrderArray(vector<int> &array) { vector<int> result; int left = 0; int right = array.size()-1; int temp; while (left<right){ while ((left<right)&& !isEven(array[left])){ //前指針向後移動直到遇到奇數 left++; } while((left<right)&& isEven(array[right])){ //後指針向前移動直到遇到偶數 right--; } if (left<right){ //走到這一步,說明前指向了偶數,後指針指向了奇數 temp = array[left]; array[left]= array[right]; array[right] = temp; } } } bool isEven(int num){ //判斷奇偶數 return (num&1)==0; } };
C++ Code(1):
class Solution { public: void reOrderArray(vector<int> &array) { vector<int> result; int num=array.size(); for(int i=0;i<num;i++) { if(array[i]%2==1) result.push_back(array[i]); } for(int i=0;i<num;i++) { if(array[i]%2==0) result.push_back(array[i]); } array=result; } };
總結:
《劍指offer》 調整數組順序使得奇數在偶數前面