原创 初級算法之樹:驗證二叉搜索樹

給定一個二叉樹,判斷其是否是一個有效的二叉搜索樹。 假設一個二叉搜索樹具有如下特徵: 節點的左子樹只包含小於當前節點的數。 節點的右子樹只包含大於當前節點的數。 所有左子樹和右子樹自身必須也是二叉搜索樹。 示例 1: 輸入:

原创 中級算法之數組和字符串:矩陣置零

矩陣置零 給定一個 m x n 的矩陣,如果一個元素爲 0,則將其所在行和列的所有元素都設爲 0。請使用原地算法。 示例 1: 輸入: [ [1,1,1], [1,0,1], [1,1,1] ] 輸出: [ [1

原创 初級算法之其他:顛倒二進制位

在此題之前,先引入十進制轉二進制表示的算法。代碼如下 public void change(int n) { for (int i = 31; i >= 0; i--) // &1表示最後一位(00011&1=00001)

原创 初級算法之樹:將有序數組轉換爲二叉搜索樹

將一個按照升序排列的有序數組,轉換爲一棵高度平衡二叉搜索樹。 本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。 示例: 給定有序數組: [-10,-3,0,5,9], 一個可能的答案是

原创 初級算法之數組:旋轉圖像

給定一個 n × n 的二維矩陣表示一個圖像。 將圖像順時針旋轉 90 度。 說明: 你必須在原地旋轉圖像,這意味着你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉圖像。 示例 1: 給定 matrix = [ [1

原创 初級算法之其他:位1的個數

編寫一個函數,輸入是一個無符號整數,返回其二進制表達式中數字位數爲 ‘1’ 的個數(也被稱爲漢明重量)。 示例 1: 輸入:00000000000000000000000000001011 輸出:3 解釋:輸入的二進制串 000

原创 初級算法之數學:計數質數

計數質數 統計所有小於非負整數 n 的質數的數量。 示例: 輸入: 10 輸出: 4 解釋: 小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。 思路: (1)首先想到依次從2遍歷到n-1,每個數檢驗是否爲質數的

原创 初級算法之設計問題:最小棧

設計一個支持 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。 push(x) -- 將元素 x 推入棧中。 pop() -- 刪除棧頂的元素。 top() -- 獲取棧頂元素。 getMin() -- 檢索棧中的

原创 初級算法之設計問題:Shuffle an Array

打亂一個沒有重複元素的數組。 示例: // 以數字集合 1, 2 和 3 初始化數組。 int[] nums = {1,2,3}; Solution solution = new Solution(nums); // 打亂數組

原创 初級算法之排序和搜索:第一個錯誤的版本

你是產品經理,目前正在帶領一個團隊開發新的產品。不幸的是,你的產品的最新版本沒有通過質量檢測。由於每個版本都是基於之前的版本開發的,所以錯誤的版本之後的所有版本都是錯的。 假設你有 n 個版本 [1, 2, …, n],你想找出導致

原创 初級算法:迴文鏈表

請判斷一個鏈表是否爲迴文鏈表。 示例 1: 輸入: 1->2 輸出: false 示例 2: 輸入: 1->2->2->1 輸出: true 進階: 你能否用 O(n) 時間複雜度和 O(1) 空間複雜度解決此題? 思路一

原创 初級算法:迴文鏈表

迴文鏈表 請判斷一個鏈表是否爲迴文鏈表。 示例 1: 輸入: 1->2 輸出: false 示例 2: 輸入: 1->2->2->1 輸出: true 進階: 你能否用 O(n) 時間複雜度和 O(1) 空間複雜度解決此題

原创 初級算法:反轉鏈表

反轉鏈表 反轉一個單鏈表。 示例: 輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2->1->NULL 進階: 你可以迭代或遞歸地反轉鏈表。你能否用兩種方法解決這道題? package com.Link

原创 leetocode三數之和

題目: 給定一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。 注意:答案中不可以包含重複的三元組。 例如, 給定數組 nums