《劍指offer》Q01 12 牛客10 11

2022-08-24 02:57:18 字數 3316 閱讀 1537

目錄

在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

由於矩陣部分有序,向上數字遞減,向右數字遞增:

目標數字只會出現在行首小於該數的行中

遍歷行i ,若列j 對應的元素大於目標,那麼在前 i-1 行,目標只會出現在 j列及以後。

因此,可以從左下角開始查詢。目標比左下角數字小時,上移;當要目標比左下角數字大時,右移。

搜尋的路線是階梯狀,複雜度為o(行數+列數)。

class solution else i--;

}return false;

}};

wa警告:

之前的錯誤**版本如下,由於判斷條件中的 && 寫成 , 造成段錯誤(陣列越界訪問):

class solution 

}return false;

}};

實現統計好空格數目從後往前寫。問題是 str 所指的空間會記憶體洩露吧?

注意補上 '\0'(應該不會有憨憨如我補了乙個'\n'...

輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個arraylist。

遞迴或者對正序 vector reverse。

class solution 

};//----------------------vv---------------------------------

class solution

reverse(rst.begin(),rst.end());

return rst;

}};

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

遞迴建樹。注意遞迴出口,當有 0 或乙個節點時直接返回。

/**

* definition for binary tree

* struct treenode

* };

*/class solution

};

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

棧1接收入佇列元素,棧2儲存出佇列元素,當棧2空時,把棧1元素倒到棧2中。

class solution

int pop()

}int x=stack2.top();

stack2.pop();

return x;

}private:

stackstack1;

stackstack2;

};

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。

輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。

例如陣列為的乙個旋轉,該陣列的最小值為1。

note:給出的所有元素都大於0,若陣列大小為0,請返回0。

由於旋轉後,陣列前半段非減,後半段非減,所以從後往前遍歷,轉折點一定是最小元素。如果沒有轉折點,那麼所有元素都相等。

​ . .··

​ . ·``

但是這個轉折點可以試著二分。由於轉折處的右側是最小元素,所以選擇盡量讓區間右端點落在最小元素上。那麼:

array[mid] > array[high]

出現這種情況的array類似[3,4,5,6,0,1,2],此時最小數字一定在mid的右邊。

low = mid + 1

array[mid] == array[high]:

出現這種情況的array類似 [1,0,1,1,1] 或者[1,1,1,0,1],此時最小數字不好判斷在mid左邊還是右邊,這時只好一步步縮小區間。

high = high - 1

array[mid] < array[high]:

出現這種情況的array類似[2,2,3,4,5,6,6],此時最小數字一定就是array[mid]或者在mid的左邊。因為右邊必然都是遞增的。

high = mid

注意,考慮最後區間長為2或為3 的情況,上述的收斂方式都會使得 low 和 high 最終都指向最小元素。

class solution 

return rotatearray[hi];

}};

t7:大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39。

class solution 

};

// 兩變數

class solution

return g;

}};

// dp

class solution

return g;

}};

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。

注意對於負數,右移一位會補 1 而非補零。

// 1. 去掉符號位 1

class solution

while(n)

return cnt;

}};// 2. 轉為 unsigned int

class solution

return cnt;

}};// 3. 每次 n&(n-1) 將從右邊起的第乙個 1 變為 0

public class solution

return count;

}}

給定乙個double型別的浮點數 base 和 int 型別的整數exponent。求base的exponent次方。 保證base和exponent不同時為0

class solution 

for( ; exponent; base*=base,exponent/=2)

}return neg?1/ans:ans;

}};

《劍指offer》Q13 18 牛客10 13

目錄輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。方法1 新開陣列,先新增奇數,再新增偶數。略。方法2 1.要想保證原有次序,則只能順次移動或相鄰交換。2.i從左向右遍歷,找到第...

牛客網 劍指offer 遞迴 (1)

出現的問題 原因 返回值沒有考慮到所有情況 輸入引數n是乙個整數,自己只考慮n 0,n 1,n 2,n 39的情況,一直報錯。改正方案 加上else,判斷其他情況均輸出0,編譯通過 菲波那切數列數列有很多變形的問題 問題1 兔子問題 題目描述 已知一對兔子每乙個月可以生一對小兔子,而一對兔子出生後....

牛客網 劍指offer,solution1

標題1.在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。本道演算法題,從題目中我們可以看到,這個陣列有一定的規律,所以我們可以這樣想,當target比arra...