輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點(含根、葉節點)形成樹的一條路徑,最長路徑的長度為樹的深度。
例如:
給定二叉樹 [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;}
}
輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那么它就是一棵平衡二叉樹。
?
示例 1:
給定二叉樹 [3,9,20,null,null,15,7]
? ? 3
? ?/ \
? 9 ?20
? ? / ?\
? ?15 ? 7
返回 true 。
示例 2:
給定二叉樹 [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;}
}
輸入一個遞增排序的數組和一個數字s,在數組中查找兩個數,使得它們的和正好是s。如果有多對數字的和等于s,則輸出任意一對即可。
?
示例 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;}
}
輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。為簡單起見,標點符號和普通字母一樣處理。例如輸入字符串"I am a student. ",則輸出"student. a am I"。
?
示例 1:
輸入: "the sky is blue"
輸出:?"blue is sky the"
示例 2:
輸入: " ?hello world! ?"
輸出:?"world! hello"
解釋: 輸入字符串可以在前面或者后面包含多余的空格,但是反轉后的字符不能包括。
示例 3:
輸入: "a good ??example"
輸出:?"example good a"
解釋: 如果兩個單詞間有多余的空格,將反轉后單詞間的空格減少到只含一個。
?
說明:
無空格字符構成一個單詞。
輸入字符串可以在前面或者后面包含多余的空格,但是反轉后的字符不能包括。
如果兩個單詞間有多余的空格,將反轉后單詞間的空格減少到只含一個。
py大法好。
class?Solution(object):def?reverseWords(self,?s):return?"?".join(s.split()[::-1])
字符串的左旋轉操作是把字符串前面的若干個字符轉移到字符串的尾部。請定義一個函數實現字符串左旋轉操作的功能。比如,輸入字符串"abcdefg"和數字2,該函數將返回左旋轉兩位得到的結果"cdefgab"。
示例 1:
輸入: s = "abcdefg", k = 2
輸出:?"cdefgab"
示例 2:
輸入: s = "lrloseumgh", k = 6
輸出:?"umghlrlose"
class Solution:def reverseLeftWords(self, s: str, n: int):return s[n:]+s[:n]
思路:可以反轉字符串,再把兩部分分別反轉,但是py太爽了。