算法学习 13

1.将有序数组转换为二叉搜索树

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。

示例 1:

复制代码
输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:

示例 2:

复制代码
输入:nums = [1,3]
输出:[3,1]
解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。
java 复制代码
class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return helper(nums, 0, nums.length - 1);
    }

    public TreeNode helper(int[] nums, int left, int right) {
        if (left > right) {
            return null;
        }

        // 总是选择中间位置左边的数字作为根节点
        int mid = (left + right) / 2;

        TreeNode root = new TreeNode(nums[mid]);
        root.left = helper(nums, left, mid - 1);
        root.right = helper(nums, mid + 1, right);
        return root;
    }
}

2.搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

示例 1:

复制代码
输入: nums = [1,3,5,6], target = 5
输出: 2

示例 2:

复制代码
输入: nums = [1,3,5,6], target = 2
输出: 1

示例 3:

复制代码
输入: nums = [1,3,5,6], target = 7
输出: 4
java 复制代码
class Solution {
    // 方法返回值应为int,而非int数组
    public int searchInsert(int[] nums, int target) {
        int n = nums.length;
        
        // 遍历数组查找目标值
        for (int j = 0; j < n; j++) {
            // 如果找到目标值,返回当前索引
            if (nums[j] == target) {
                return j;
            }
            // 如果当前元素大于目标值,说明目标值应插入到当前位置
            if (nums[j] > target) {
                return j;
            }
        }
        
        // 如果所有元素都小于目标值,插入到数组末尾
        return n;
    }
}
    
相关推荐
炸薯条!10 分钟前
树--二叉树--堆
数据结构
FserSuN12 分钟前
Machine Learning Specialization - Week 1, 9-20学习总结
人工智能·学习·机器学习
OBiO201324 分钟前
肺部靶向 AAV 怎么选?如何解决靶向不精准、转导效率低的递送难题?
学习
weixin_4684668524 分钟前
机器学习之决策树新手实战指南
人工智能·python·算法·决策树·机器学习·ai
wanghu202429 分钟前
ABC460_E题题解
c++·算法
z2005093030 分钟前
今日算法(回溯子集)
数据结构·算法·leetcode
Hesionberger33 分钟前
巧用异或找出唯一数字(多解)
java·数据结构·python·算法·leetcode
我命由我1234533 分钟前
UGC、PGC、PUGC 极简理解
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
七老板的blog38 分钟前
【Agent智能体】 任务规划工作流
python·学习·ai·开源
变量未定义~1 小时前
阶乘的约数和、斐波那契数列、数列区间最大值(ST表)
数据结构·算法