對於這道題來說,書上的和leetcode上的是不一樣的。
在leetcode上,是一位陣列中判斷是否有重複數字,有的話任意返回乙個就行。這個思路也有兩個:
1.先用乙個排序如快排o(nlogn),然後就判斷相鄰元素是否相等,若相等直接返回即可。
2.用乙個集合set,遍歷陣列放進去,因為集合有唯一性,若哪個在新增的時候,新增失敗,說明這個已經在集合中了,就意味著重複。需要注意的是set沒有push_back。
class solution
else
}return 0;
}};
3.因為陣列裡的數字都在0 - n-1之間,令每個數字對應到下標,最後如果得到nums[i] == nums[nums[i]]即出現重複值。
class solution
}return 0;
}};
在書上是在二維陣列中查詢,對應leetcode上的面試題4,且陣列是滿足從左到右,從上到下遞增的,然後給定乙個數,判斷這個數是否在陣列中。這個的解法不好想到,首先從右上角的數字開始,將其與給定的數比較,若大於給定數,說明這一列的數都大於,刪除這一列即可;小於則刪除這一行,以此類推即可。c++**如下:
class solution
int m = matrix.size();
int n = matrix[0].size();
int row = m - 1;
int col = 0;
while (row >=0 && col < n)
else if(matrix[row][col] > target)
else
}return false;
}};
注意是size(),還有m和n的表示方法,還有matrix[row][col]這個表示方法。
此題是讓把字串中的所有空格替換成"%20"。遇到此題,首先考慮的是:
字串變長了,原來的記憶體是否能放下?假設能放下,記憶體足夠。
思路一是從前到後遍歷替換,遇到空格就換。但後果是後面的字元每次都要移動,o(n^2)。
思路二是從後向前遍歷替換,o(n),先遍歷一遍,得知有多少個空格,則新字串就為源字串數加上2倍的空格數,書上**:
class solution
int newlength = originallength + numberofblank;
if (newlength > length) return ;
int indexoforiginal = originallength;
int indexofnew = newlength;
while(indexoforiginal >= 0 && indexofnew > indexoforiginal)
else
s[indexofnew --] = s[indexoforiginal];
-- indexoforiginal;}}
};
其實還有更簡單的**(清清楚楚):
class solution
return res;
}};
題目描述很直接,沒什麼需要注意的。
方法一 :使用棧,因為棧有現進後出的性質,先將元素壓入棧中,再彈出,就實現了反轉。時間和空間都是o(n)。
class solution
while(!st.empty())
return res;
}};
方法二:使用遞迴,時間和空間都是o(n)。
class solution
};
方法三:從頭到尾列印鍊錶到陣列中,返回反轉後的結果即可。時間和空間都是o(n)。
class solution
reverse(res.begin(), res.end());
return res;
}};
這道題是給出前序遍歷和中序遍歷的結果,要求重建出二叉樹。首先,前序是(根左右),中序是(左右根)。
先找到preorder中的起始元素作為根節點,在inorder中找到根節點的索引mid;那麼,前序中第乙個是根節點,preorder[1:mid + 1]為左子樹,preorder[mid + 1:]為右子樹;中序中,inorder[0:mid]為左子樹,mid為根節點,inorder[mid + 1:]為右子樹。遞迴建立二叉樹。
下面這個做法真巧妙。
/**
* definition for a binary tree node.
* struct treenode
* };
*/class solution
};
用中序和後序重建二叉樹:程式會溢位
class solution
};
劍指offer筆記整理
本部落格借鑑了這篇部落格的版面設計,以及部分解題思路,主要用於個人劍指offer的刷題過程中的筆記整理。鍊錶部分 8道 劍指offer 三 從尾到頭列印鍊錶 劍指offer 十四 鍊錶中倒數第k個結點 劍指offer 十五 反轉鍊錶 劍指offer 十六 合併兩個排序的鍊錶 劍指offer 二十五 ...
劍指offer學習筆記
筆記主要記錄方法和知識點 知識點1 負數與補碼 乙個參考 知識點2 移位操作 右移 變小 按位 操作 知識點3 0xffffffff表示32位 1 o logn 的方法 非遞迴的快速冪,用到二進位制表示。在迴圈內注意base base。兩個指標等間距一起走。想明白斷開鍊錶這個事情,相當於操作是在原有...
劍指offer刷題筆記
給定一顆二叉搜尋樹,請找出其中的第k大的結點。例如,5 3 7 2 4 6 8 中,按結點數值大小順序第三個結點的值為4。struct treenode class solution treenode kthnode treenode proot,int k 非遞迴實現 class solution...