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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

剑指offer 算法 (代码的完整性)

發布時間:2025/10/17 编程问答 8 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指offer 算法 (代码的完整性) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述

給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。

class Solution { public:double Power(double base, int exponent) {if(equal(exponent,0.0)&&(exponent<0))//base為零 系數為負數return 0;unsigned int unexponent=(unsigned int) exponent;if(exponent<0)unexponent=(unsigned int) (-exponent);double result;result=powInput(base,unexponent);if(exponent<0)result=1.0/result;return result;}bool equal(double val1,double val2){if(((val1-val2)>-0.000001)&&((val1-val2)<0.000001))return true;elsereturn false;}double powInput(double base,int exponent){int i;double result=1.0;for(i=exponent;i>0;i--)result=base*result;return result;} };
題目描述

輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位于數組的前半部分,所有的偶數位于位于數組的后半部分,并保證奇數和奇數,偶數和偶數之間的相對位置不變。

解析:(方法一)兩個指針p1,p2;p1指向奇數,p2指向偶數,當p1指向的奇數在p2指向的偶數后時,保存p1的奇數,后移從p2開始到p1前一位的數組的數,把奇數賦給p2;p1,p2同時后移一位。直到p1指到數組尾(空間復雜度小)

class Solution { public:void reOrderArray(vector<int> &array) {int length = array.size();if(length == 0)return;int i;int *p1;//指向奇數int *p2;//指向偶數int cnt1=0;//p1指針移動次數int cnt2=0;//p2指針移動次數p1 = &array.at(0);//初始化 指向數組首元素p2 = &array.at(0);int temp1=0;//保存p1的奇數值while(!( ( *p1 == array.at(length-1) ) && ( *p2 == array.at(length-1) ) ) )//p1p2指向數字尾元素 退出循環{//printf("%d\t%d\r\n",cnt1,cnt2);while( ( ( *p1 & 0x1) == 0 ) && ( cnt1 < (length-1) ) )//p1指向偶數且不到數組尾 p1移動{p1++;cnt1++;}while( !( (*(p1+1) & 0x1) == 0 ) && ( cnt1 < (length-1) ) && (cnt1<=cnt2))//p1下一位指向奇數時 使p1指向最后一個奇數{p1++;cnt1++;}while( !( (*p2 & 0x1) == 0 ) && ( cnt2 < (length-1) ) )//p2指向奇數且不到數組尾 p2移動{p2++;cnt2++;}if( ( cnt1 < cnt2 ) && ( cnt1 < (length-1) ) )//若奇數在偶數前 p1繼續向后移動{p1++;cnt1++;continue;}//此時p1指向亂序的第一個奇數 p2指向第一個偶數 p2在p1前面//保存p1位的奇數值 使p2開始往后到p1前的值全部往后移動一位 把保存的p1的奇數值賦給p2指向的位if(!(( *p1 & 0x1) == 0 ))//*p1是奇數{temp1 = *p1;for( i = cnt1 ; i > cnt2 ; i-- ){array.at(i) = array.at(i-1);//printf("%d:%d",i,array.at(i));}array.at(i)=temp1;}//printf("%d:%d",i,array.at(i));if(cnt1<(length-1)){p1++;cnt1++;}if(cnt2<(length-1)){p2++;cnt2++;}if(cnt1==(length-1)){if((( *p1 & 0x1) == 0 ))//數組尾時偶數 退出循環break;}}} };
解析:(方法二)用兩個棧分別存奇偶數,在出棧先賦予數組奇數后偶數(時間復雜度小)

class Solution { public:void reOrderArray(vector<int> &array) {if(array.size()==0){return;}vector<int> odd;vector<int> even;for(int i=0;i<array.size();i++){if(array[i]%2==0){even.push_back(array[i]);}else{odd.push_back(array[i]);}}for(int i=0;i<odd.size();i++){array[i]=odd[i];}for(int i = odd.size();i<array.size();i++){array[i]=even[i-odd.size()];}} };

總結

以上是生活随笔為你收集整理的剑指offer 算法 (代码的完整性)的全部內容,希望文章能夠幫你解決所遇到的問題。

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