961. 在长度 2N 的数组中找出重复 N 次的元素 / 剑指 Offer II 054. 所有大于等于节点的值之和

961. 在长度 2N 的数组中找出重复 N 次的元素【简单题】【每日一题】

思路:【简单模拟】

答案的随机选择真是把我秀到了,不过这个不稳定,还是哈希表更直接一点。

代码:

class Solution {
    public int repeatedNTimes(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int num : nums) {
            if (!set.add(num)){
                return num;
            }
        }
        return -1;
    }
}
class Solution {
    public int repeatedNTimes(int[] nums) {
       Random random = new Random();
        int n = nums.length;
        while (true){
            int n1 = random.nextInt(n),n2 = random.nextInt(n);
            if (n1 != n2 && nums[n1] == nums[n2]){
                return nums[n1];
            }
        }
    }
}

剑指 Offer II 054. 所有大于等于节点的值之和【中等题】

思路:【逆向中序遍历】

官方题解:逆向中序遍历,并累加遍历到的节点值,将节点值更新为累加值。

代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    
    int sum = 0;

    public TreeNode convertBST(TreeNode root) {
        if (root != null){
            //如果root不为null,就递归调用convertBST函数,传入root.right,直到找到BST右子树最右侧的节点被找到为止
            convertBST(root.right);
            // sum 为倒序BST的节点累加和
            sum += root.val;
            // root 为倒序BST的节点,将节点的值更新为倒序的累加和
            root.val = sum;
            // 更新为 BST 的当前节点之后,递归调用convertBST函数,传入 root.left,累加并更新root左子树的节点
            convertBST(root.left);
        }
        //最后将最开始传入的root返回即可
        return root;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值