目錄
在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。由於矩陣部分有序,向上數字遞減,向右數字遞增:
目標數字只會出現在行首小於該數的行中
遍歷行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...