java算法训练------ LeetCode 精选 TOP 面试题------验证二叉搜索树、摆动排序 II

验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

输入:
    2
   / \
  1   3
输出: true

示例 2:

输入:
    5
   / \
  1   4
     / \
    3   6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
     根节点的值为 5 ,但是其右子节点值为 4

思路:使用中序遍历,并使用一个新的node指向上一个节点

private boolean isTwo = true;
private TreeNode pre;

public boolean isValidBST(TreeNode root) {
     
    isTwo = true;
    dfs(root);
    return isTwo;
}
public void dfs(TreeNode root){
     
    if(!isTwo || root==null){
     
        return;
    }
    dfs(root.left);
    if(pre!=null){
     
        if(pre.val>= root.val){
     
            isTwo = false;
            return;
        }
    }
    pre = root;
    dfs(root.right);
}

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/validate-binary-search-tree



摆动排序 II
给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。

你可以假设所有输入数组都可以得到满足题目要求的结果。

示例 1:

输入:nums = [1,5,1,1,6,4]
输出:[1,6,1,5,1,4]
解释:[1,4,1,5,1,6] 同样是符合题目要求的结果,可以被判题程序接受。

示例 2:

输入:nums = [1,3,2,2,3,1]
输出:[2,3,1,3,1,2]

提示:

1 <= nums.length <= 5 * 104
0 <= nums[i] <= 5000
题目数据保证,对于给定的输入 nums ,总能产生满足题目要求的结果

思路:将数组进行排序,并且将数组分成两份,前面的一份比后面一份多一个元素。并且把两份数组都进行翻转,按照从大到小。这样就可以避免刚好分隔的两个数组中,同时存在一个元素的问题
代码:

public void wiggleSort(int[] nums) {
     
    Arrays.sort(nums);
    // 分隔前后半段 前半段+1=后半段
    int len = nums.length % 2 == 0 ? nums.length / 2 : nums.length / 2 + 1;
    int lastLen = nums.length % 2 == 0 ? nums.length-len : nums.length-len+1;
    int[] first = new int[len];
    int[] last = new int[nums.length - len];
    for (int i = len - 1,j=0; i >= 0; i--,j++) {
     
        first[i] = nums[j];
    }
    for (int i = nums.length - 1, j = 0; i >= lastLen; i--, j++) {
     
        last[j] = nums[i];
    }
    //一小一大
    for (int i = 0, j = 0; i < nums.length; i++, j++) {
     
        nums[i] = first[j];
        i++;
        if (j < last.length)
            nums[i] = last[j];
    }
}

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/wiggle-sort-ii

你可能感兴趣的:(LeetCode,精选,TOP,面试题)