剑指offer:55-58记录
輸入一棵二叉樹(shù)的根節(jié)點(diǎn),求該樹(shù)的深度。從根節(jié)點(diǎn)到葉節(jié)點(diǎn)依次經(jīng)過(guò)的節(jié)點(diǎn)(含根、葉節(jié)點(diǎn))形成樹(shù)的一條路徑,最長(zhǎng)路徑的長(zhǎng)度為樹(shù)的深度。
例如:
給定二叉樹(shù) [3,9,20,null,null,15,7],
? ? 3
? ?/ \
? 9 ?20
? ? / ?\
? ?15 ? 7
返回它的最大深度?3 。
思路:遞歸
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/ class Solution {public int maxDepth(TreeNode root) {if (root == null) return 0;return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;} }輸入一棵二叉樹(shù)的根節(jié)點(diǎn),判斷該樹(shù)是不是平衡二叉樹(shù)。如果某二叉樹(shù)中任意節(jié)點(diǎn)的左右子樹(shù)的深度相差不超過(guò)1,那么它就是一棵平衡二叉樹(shù)。
?
示例 1:
給定二叉樹(shù) [3,9,20,null,null,15,7]
? ? 3
? ?/ \
? 9 ?20
? ? / ?\
? ?15 ? 7
返回 true 。
示例 2:
給定二叉樹(shù) [1,2,2,3,3,null,null,4,4]
? ? ? ?1
? ? ? / \
? ? ?2 ? 2
? ? / \
? ?3 ? 3
? / \
?4 ? 4
返回?false 。
遞歸,-1代表不是。
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/ class Solution {public boolean isBalanced(TreeNode root) {return depth(root) != -1;}private int depth(TreeNode root) {if (root == null) return 0;int left = depth(root.left);if(left == -1) return -1;int right = depth(root.right);if(right == -1) return -1;return Math.abs(left - right) < 2 ? Math.max(left, right) + 1 : -1;} }輸入一個(gè)遞增排序的數(shù)組和一個(gè)數(shù)字s,在數(shù)組中查找兩個(gè)數(shù),使得它們的和正好是s。如果有多對(duì)數(shù)字的和等于s,則輸出任意一對(duì)即可。
?
示例 1:
輸入:nums = [2,7,11,15], target = 9
輸出:[2,7] 或者 [7,2]
示例 2:
輸入:nums = [10,26,30,31,47,60], target = 40
輸出:[10,30] 或者 [30,10]
?
限制:
1 <= nums.length <= 10^5
1 <= nums[i]?<= 10^6
雙指針
class Solution {public int[] twoSum(int[] nums, int target) {int left=0,right=nums.length-1;while(left<right){if (nums[left]+nums[right]==target){return new int[]{nums[left],nums[right]};}else if (nums[left]+nums[right]<target)left++;elseright--;}return null;} }輸入一個(gè)英文句子,翻轉(zhuǎn)句子中單詞的順序,但單詞內(nèi)字符的順序不變。為簡(jiǎn)單起見(jiàn),標(biāo)點(diǎn)符號(hào)和普通字母一樣處理。例如輸入字符串"I am a student. ",則輸出"student. a am I"。
?
示例 1:
輸入: "the sky is blue"
輸出:?"blue is sky the"
示例 2:
輸入: " ?hello world! ?"
輸出:?"world! hello"
解釋: 輸入字符串可以在前面或者后面包含多余的空格,但是反轉(zhuǎn)后的字符不能包括。
示例 3:
輸入: "a good ??example"
輸出:?"example good a"
解釋: 如果兩個(gè)單詞間有多余的空格,將反轉(zhuǎn)后單詞間的空格減少到只含一個(gè)。
?
說(shuō)明:
無(wú)空格字符構(gòu)成一個(gè)單詞。
輸入字符串可以在前面或者后面包含多余的空格,但是反轉(zhuǎn)后的字符不能包括。
如果兩個(gè)單詞間有多余的空格,將反轉(zhuǎn)后單詞間的空格減少到只含一個(gè)。
py大法好。
class?Solution(object):def?reverseWords(self,?s):return?"?".join(s.split()[::-1])字符串的左旋轉(zhuǎn)操作是把字符串前面的若干個(gè)字符轉(zhuǎn)移到字符串的尾部。請(qǐng)定義一個(gè)函數(shù)實(shí)現(xiàn)字符串左旋轉(zhuǎn)操作的功能。比如,輸入字符串"abcdefg"和數(shù)字2,該函數(shù)將返回左旋轉(zhuǎn)兩位得到的結(jié)果"cdefgab"。
示例 1:
輸入: s = "abcdefg", k = 2
輸出:?"cdefgab"
示例 2:
輸入: s = "lrloseumgh", k = 6
輸出:?"umghlrlose"
思路:可以反轉(zhuǎn)字符串,再把兩部分分別反轉(zhuǎn),但是py太爽了。
總結(jié)
以上是生活随笔為你收集整理的剑指offer:55-58记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: leetcode1491. 工资平均值
- 下一篇: 剑指offer之矩阵中的路径