LeetCode簡單難度題解 二

2021-09-20 07:14:33 字數 3730 閱讀 5706

給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。

你可以假設陣列中無重複元素。

題解

迴圈陣列 從後往前找,當匹配到第乙個比目標值小的那個元素下標的時候 返回下標+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...