劍指offer 38 數字在排序陣列中出現的次數

2021-09-07 11:31:40 字數 1867 閱讀 4193

自己的寫法

class

solution

int index1 = getfirst(data,k,0,length-1

);

int index2 = getlast(data,k,0,length-1

);

return exit(data,k) ? (index2-index1+1) : 0

;

}int getfirst(vector data,int k,int start,int

end)

else

if(data[mid] first = getfirst(data,k,mid+1

,end);

else

first = getfirst(data,k,start,mid-1

);

return

first;

}int getlast(vector data,int k,int start,int

end)

else

if(data[mid] last = getlast(data,k,mid+1

,end);

else

last = getlast(data,k,start,mid-1

);

return

last;

}bool exit(vector data,int

k)

return

false

; }

};

更簡潔的**

class

solution

int getfirstk(vector data,int k,int start,int

end)

else

if(data[mid] >k)

end = mid - 1

;

else

if(data[mid] start = mid + 1

;

return

getfirstk(data,k,start,end);

}int getlastk(vector data,int k,int start,int

end)

else

if(data[mid] >k)

end = mid - 1

;

else

if(data[mid] start = mid + 1

;

return

getlastk(data,k,start,end);

}};

用迴圈的方法做:

注意乙個問題,end只能等於mid - 1,不能等於mid,同樣begin只能等於mid + 1,不能等於mid。如果換成mid,當只有兩個數的時候,會陷入死迴圈!

class

solution

int findfirstk(vector data,int

k)

if(data[begin] ==k)

return

begin;

else

return -1

; }

int findlastk(vector data,int

k)

if(data[begin] ==k)

return

begin;

else

return -1

; }

};

劍指Offer 38 數字在排序陣列中出現的次數

題目 統計乙個數字在排序陣列 現的次數。方法一 二分查詢 因為陣列是排序陣列,因此我們使用二分查詢找到k,然後左右遍歷統計k的個數。public class solution int mid l r 1 if array mid else if array mid k else for int j ...

劍指Offer38 平衡二叉樹

思路 判斷是否是平衡二叉樹,即判斷任何乙個節點的左子樹和右子樹的高度差的絕對值小於等於1。最直接的做法,遍歷每個結點,借助乙個獲取樹深度的遞迴函式,根據該結點的左右子樹高度差判斷是否平衡,然後遞迴地對左右子樹進行判斷。class treenode def init self,x self.val x...

劍指offer38 平衡二叉樹

題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。思路 平衡二叉樹 balanced binary tree 具有以下性質 它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。判斷兩邊高度,我這裡想著用誰子樹沒了就會在和左子樹的比較中比較會等於 1,然後...