有序数组转为二叉搜索树
有序数组转为二叉搜索树 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 **高度平衡 **二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
示例 1:
输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return toTree(nums,0,nums.length-1);
}
private TreeNode toTree(int[] nums, int l, int r) {
if(l>r) return null;
int m=l+((r-l)>>1);
int val=nums[m];
TreeNode root=new TreeNode(val);
TreeNode left=toTree(nums,l,m-1);
TreeNode right=toTree(nums,m+1,r);
root.left=left;
root.right=right;
return root;
}
}
寻找两个正序数组的中位数
class Solution {
public static void main(String[] args) {
int[] nums1=new int[]{1,3};
int[] nums2=new int[]{2};
findMedianSortedArrays(nums1,nums2);
}
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
int len1 = nums1.length;
int len2 = nums2.length;
int len=(len1+len2)/2+1;
if(len==1){
if(nums1.length==1){
return nums1[0];
}else {
return nums2[0];
}
}
int[] nums=new int[len];
int index1=0;
int index2=0;
for (int i = 0; i < nums.length; i++) {
if(index1<len1&&index2<len2&&nums1[index1]<nums2[index2]){
nums[i]=nums1[index1++];
}else if(index1<len1&&index2<len2&&nums1[index1]>=nums2[index2]){
nums[i]=nums2[index2++];
}else if(index1==len1){
nums[i]=nums2[index2++];
}else if(index2==len2){
nums[i]=nums1[index1++];
}
}
double x=nums[len-1];
double y=nums[len-2];
return (len1+len2)%2==0?(x+y)/2:x;
}
}