劍指offer 1-5
沒什麼好思想,都是暴力解答。
- 在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
public boolean Find(int target, int [][] array) {
if(array==null) return false;
if(array[0].length==0) return false;
int row = array.length;
int col = array[0].length;
int i = 0,j = col-1;
while(i<row&&j>=0&&j<col){
if(target==array[i][j]) return true;
else if(target<array[i][j]) j-=1;
else i+=1;
}
return false;
}
- 請實現一個函數,將一個字符串中的每個空格替換成“%20”。例如,當字符串爲We Are Happy.則經過替換之後的字符串爲We%20Are%20Happy。
public String replaceSpace(StringBuffer str) {
if(str==null) return null;
String str01 = str.toString();
return str01.replaceAll(" ","%20");
}
- 輸入一個鏈表,按鏈表從尾到頭的順序返回一個ArrayList。
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> result = new ArrayList<Integer>();
ArrayList<Integer> tmp = new ArrayList<Integer>();
if(listNode==null) return result;
tmp.add(listNode.val);
while(listNode.next!=null){
listNode = listNode.next;
tmp.add(listNode.val);
}
int size = tmp.size();
for(int i=size-1;i>=0;i--){
result.add(tmp.get(i));
}
return result;
}
4.用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素爲int類型。
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(!stack2.isEmpty())
return stack2.pop();
else {
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
return stack2.pop();
}
}
- 把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉。
輸入一個非遞減排序的數組的一個旋轉,輸出旋轉數組的最小元素。
例如數組{3,4,5,1,2}爲{1,2,3,4,5}的一個旋轉,該數組的最小值爲1。
NOTE:給出的所有元素都大於0,若數組大小爲0,請返回0。
public int minNumberInRotateArray(int [] array) {
int res = 0;
if(array.length==0) return res;
for(int i=0;i<array.length-1;i++)
if(array[i+1]<array[i]) res = array[i+1];
return res;
}