給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。
你可以假設陣列中無重複元素。
題解
迴圈陣列 從後往前找,當匹配到第乙個比目標值小的那個元素下標的時候 返回下標+1就是目標值要插入的位置,如果有正好匹配的值 直接返回下標
public int searchinsert(int nums, int target)
if(nums[i] < target)
if(i == 0)
}return -1;
}
給定乙個整數陣列 nums ,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。
題解
直接看**注釋吧,很簡單的一道題
public static int maxsubarray3(int nums)
return res;
}
方法二:
public static int maxsubarray(int nums)
return res;
}
給定乙個僅包含大小寫字母和空格 』 』 的字串,返回其最後乙個單詞的長度。
如果不存在最後乙個單詞,請返回 0 。
說明:乙個單詞是指由字母組成,但不包含任何空格的字串。
題解
到目前為止最簡單的題了
方法一 :
按空格拆分 取最後一段的長度!!
public int lengthoflastword(string s) else
}
方法二:
去掉前後空格 後 整體長度減去最後乙個空格之前的長度 lastindexof是從0開始 最後多減乙個1
public int lengthoflastword2(string s)
給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。
最高位數字存放在陣列的首位, 陣列中每個元素只儲存乙個數字。
你可以假設除了整數 0 之外,這個整數不會以零開頭。
題解
這題分為三種情況
最後一位小於9的時候 直接加1 返回
最後一位d等於9的時候 當前位數歸0表示進1接著走迴圈 當出現第乙個小於9的時候加1返回
最後一種情況 例如 9999 加1 總位數會加1 當迴圈走完 還沒有返回, 新建乙個陣列 第一位為0
public int plusone(int digits) else
}int res = new int[digits.length + 1];
res[0] = 1;
return res;
}
給定兩個二進位制字串,返回他們的和(用二進位制表示)。
輸入為非空字串且只包含數字 1 和 0。
題解
不斷的取模 除2 最後考慮進製問題就行了
首先使用乙個stringbuilder就可以防止不斷的開闢新的空間
兩數從後往前相加,定義乙個用於記錄進製的變數
最後迴圈走完的時候判斷是否還有進製 有就把進製新增到stringbuilder中
反向輸出 返回
public static string addbinary(string a, string b)
if (remainder != 0)
return sb.reverse().tostring();// 反向輸出
}
假設你正在爬樓梯。需要 n 階你才能到達樓頂。
每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?
題解
其實就是乙個斐波那契數
舉個例子: 假設你只差最後一步就走到第10級台階,這時候分為兩種情況,9-10或8-10走一步或兩步 ,既然想要走到第10級,那最後一步必然是從8或9開始,那麼如果已知0-9有x種走法,0-8有y種走法,那麼0-10就有 x + y種走法
這個時候把問題反過來想,
當走到1級台階的時候 只有1種走法 1
當走到2級台階的時候有2種走法 11 2
根據上面的推斷 f(n) = f(n-1) + f(n-2);
那**台階的走法就是 1 + 2 等於3種
四級台階的走法就是 2 + 3 等於5種 以此類推
public int climbstairs(int n)
return res;
}
if (n <= 2) else
給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。
題解
這題超簡單,,,
如果當前值和它的next值相等 就讓它的next直接指向 next的next
public static listnode deleteduplicates(listnode head) else
}return head;
}
給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為乙個有序陣列。
說明:初始化 nums1 和 nums2 的元素數量分別為 m 和 n。
你可以假設 nums1 有足夠的空間(空間大小大於或等於 m + n)來儲存 nums2 中的元素。
題解
因為nums1和nums2本身就是有序的,所有就可以直接從最後開始比較 誰大就取誰 然後–
最後因為是把兩個陣列合併到nums1 所有如果 j 小於0了 nums1剩下的不用管,如果i小於0了就把nums[j]剩下的放在陣列前面
public void merge(int nums1, int m, int nums2, int n)
while (j >= 0)
}
給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。
如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。
題解
當兩個樹都為空的時候 表示他們相等
當有乙個樹為空的時候 不相等
當前節點的值不相等 返回false
最後遞迴 把兩個樹的左子樹比較,把兩個樹的右子樹進行比較
public boolean issametree(treenode p, treenode q)
給定乙個二叉樹,檢查它是否是映象對稱的。
題解
思路:t1的左子樹等於t2的右子樹
t1的右子樹 等於t2的左子樹
public boolean issymmetric(treenode root)
public boolean ismirror(treenode t1, treenode t2)
力扣題解 簡單難度
不定時更新 給定乙個整數陣列 nums 和乙個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。你可以按任意順序返回答案。我的解答 時間複雜度為o n 2 def twosum s...
二 leetcode 中等難度 1
leetcode中等難度貼,每個帖子5題。2.鍊錶加法 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會...
Leetcode之樹(簡單難度篇)
1.相同的樹 遞迴法 迭代法 時間複雜度均為o n 空間複雜度在最好 最差的情況下分別為o log n o n 2.對稱二叉樹 遞迴法 迭代法都與第一題類似,將本題看作自己和自己的映象進行比較,看看是否是相同的樹,也就是遷移到第一題的解法中去。3.二叉樹的最大深度 遞迴法 迭代法 注 1 特別注意d...