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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

剑指offer 算法 (知识迁移能力)

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

統計一個數字在排序數組中出現的次數。

解析:采用二分查找,搜到數字后在其前后判斷并計數

class Solution { public:int GetNumberOfK(vector<int> data ,int k) {int length=data.size();if(length <= 0)return 0;int cnt=0;int left=0;int right=length-1;int mid=(left + right)/2;while(k != data[mid] && left < right){if(k<data[mid]){right=mid-1;mid=(left + right)/2;}if(k>data[mid]){left=mid+1;mid=(left + right)/2;}}int flag=0;//搜索標志 找到時為1if(k == data[mid]){cnt++;flag=1;}int pos=mid;if(flag){int i=mid-1;while(data[i]==k){cnt++;i--;}i=mid+1;while(data[i]==k){cnt++;i++;}}return cnt;} };
題目描述

輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。

解析:遞歸計算結點的左右結點

/* struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {} };*/ class Solution { public:int TreeDepth(TreeNode* pRoot){if(pRoot==NULL)return 0;int left=TreeDepth(pRoot->left);int right=TreeDepth(pRoot->right);return left>right?left+1:right+1;} };題目描述

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。

解析:后序遍歷,每遍歷一個結點時保存該結點的深度,當某結點不滿足條件時返回假

class Solution { public:bool IsBalanced_Solution(TreeNode* pRoot) {int depth=0;return isBalance(pRoot,&depth);}bool isBalance(TreeNode* pRoot,int* depth){if(pRoot==NULL){*depth=0;return true;}int left,right;if(isBalance(pRoot->left,&left) && isBalance(pRoot->right,&right)){int dif=left-right;if(dif<=1 && dif>=-1){*depth = left > right ? left+1 : right+1;return true;}}return false;} };題目描述一個整型數組里除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。

題目描述


一個整型數組里除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。

解析:亦或處理:相同數字異或結果為零,把數組遍歷全部異或,結果必為兩個只出現一個的數字的異或結果,由于兩個數字不同,必然異或的數存在至少一位為1,找到一位,并以這一位所在數字為0或為1,把整個數組重新分為兩個子數組,這樣兩個不同的數就分到了兩個子數組中,再分別遍歷異或兩個子數組就能得到唯二的兩個單獨出現的數字

class Solution { public:void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {int length=data.size();if(length==0 || length==1){*num1=0;*num2=0;return;}int exclusive=resultExclusive(data);int num=1;while(exclusive < (num ^ exclusive) )num = (num << 1);vector<int> data1;vector<int> data2;for(int i=0;i<length;i++){if((data[i] ^ num) > data[i])data1.push_back(data[i]);elsedata2.push_back(data[i]);}*num1=resultExclusive(data1);*num2=resultExclusive(data2);}int resultExclusive(vector<int> data){int length=data.size();if(length==0)return 0;int result=0;for(int i=0;i<length;i++){result=(result ^ data[i]);}return result;} };

總結

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

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