日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

發(fā)布時(shí)間:2025/10/17 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指offer 算法 (代码的完整性) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目描述

給定一個(gè)double類型的浮點(diǎn)數(shù)base和int類型的整數(shù)exponent。求base的exponent次方。

class Solution { public:double Power(double base, int exponent) {if(equal(exponent,0.0)&&(exponent<0))//base為零 系數(shù)為負(fù)數(shù)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;} };
題目描述

輸入一個(gè)整數(shù)數(shù)組,實(shí)現(xiàn)一個(gè)函數(shù)來(lái)調(diào)整該數(shù)組中數(shù)字的順序,使得所有的奇數(shù)位于數(shù)組的前半部分,所有的偶數(shù)位于位于數(shù)組的后半部分,并保證奇數(shù)和奇數(shù),偶數(shù)和偶數(shù)之間的相對(duì)位置不變。

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

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

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()];}} };

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。