wy的leetcode刷题记录_Day57
声明
本文章的所有题目信息都来源于leetcode
 如有侵权请联系我删掉!
 时间:2022-12-1
前言
leetcode 每日一题+二叉树 1779. 找到最近的有相同 X 或 Y 坐标的点 701. 二叉搜索树中的插入操作
 
目录
- wy的leetcode刷题记录_Day57
 - 声明
 - 前言
 - 1779. 找到最近的有相同 X 或 Y 坐标的点
 - 题目介绍
 - 思路
 - 代码
 - 收获
 
- 701. 二叉搜索树中的插入操作
 - 题目介绍
 - 思路
 - 代码
 - 收获
 
1779. 找到最近的有相同 X 或 Y 坐标的点
今天的每日一题是:1779. 找到最近的有相同 X 或 Y 坐标的点
 
题目介绍
给你两个整数 x 和 y ,表示你在一个笛卡尔坐标系下的 (x, y) 处。同时,在同一个坐标系下给你一个数组 points ,其中 points[i] = [ai, bi] 表示在 (ai, bi) 处有一个点。当一个点与你所在的位置有相同的 x 坐标或者相同的 y 坐标时,我们称这个点是 有效的 。
请返回距离你当前位置 曼哈顿距离 最近的 有效 点的下标(下标从 0 开始)。如果有多个最近的有效点,请返回下标 最小 的一个。如果没有有效点,请返回 -1 。
两个点 (x1, y1) 和 (x2, y2) 之间的 曼哈顿距离 为 abs(x1 - x2) + abs(y1 - y2) 。
示例 1:
输入:x = 3, y = 4, points = [[1,2],[3,1],[2,4],[2,3],[4,4]]
输出:2
解释:所有点中,[3,1],[2,4] 和 [4,4] 是有效点。有效点中,[2,4] 和 [4,4] 距离你当前位置的曼哈顿距离最小,都为 1 。[2,4] 的下标最小,所以返回 2 。
示例 2:
输入:x = 3, y = 4, points = [[3,4]]
输出:0
提示:答案可以与你当前所在位置坐标相同。
思路
一道简单的模拟题,通过题意我们知道,我们需要寻找曼哈顿距离最小的有效点,而对于有效点的定义是x坐标或者y坐标相等,并且根据曼哈顿距离的公式我们可以知道其实距离就是x坐标或者y坐标之差(因为有一个相等了),所以我们使用俩个变量维护最短距离和最短距离下标即可。
代码
class Solution {
public:
    int nearestValidPoint(int x, int y, vector<vector<int>>& points) {
        int n=points.size();
        int min_distance=INT_MAX;
        int min_index=-1;
        for(int i=0;i<n;i++)
        {
            if(x==points[i][0])
            {
                if(min_distance>abs(y-points[i][1]))
                {
                    min_distance=abs(y-points[i][1]);
                    min_index=i;
                }
            }
            else if(y==points[i][1])
            {
                if(min_distance>abs(x-points[i][0]))
                {
                    min_distance=abs(x-points[i][0]);
                    min_index=i;
                }
            }
        }
        return min_index;
    }
};
 
收获
手速题。
701. 二叉搜索树中的插入操作
701. 二叉搜索树中的插入操作
题目介绍
给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。
示例 1:
输入:root = [4,2,7,1,3], val = 5 输出:[4,2,7,1,3,5]
解释:另一个满足题目要求可以通过的树是:
示例 2:
输入:root = [40,20,60,10,30,50,70], val = 25
输出:[40,20,60,10,30,50,70,null,null,25]
思路
首先最简单的思路:我们忽略掉题目中的另一种插入方式:重新排列树的结构,我们只管将拆入的值加入树的叶子节点,我们可以使用递归也可以使用递推,对于递归的方法:我们首先判断需要插入的树是否为空,如果为空的话我们就以拆入的值构造根节点然后返回。如果不为空,我们判断该值与当前节点的值,如果小于当前节点的话就向左遍历,如果检查到其没有左节点后,我们插入该值构造的节点作为左节点即可,反之向右。
代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* insertIntoBST(TreeNode* root, int val) {
        if(root==nullptr)
            return new TreeNode(val);
        
        if(val<root->val)
        {
            if(root->left==nullptr)
            {
                root->left=new TreeNode(val);
                return root;
            }
            root->left=insertIntoBST(root->left,val);
        }
        else
        {
            if(root->right==nullptr)
            {
                root->right=new TreeNode(val);
                return root;
            }
            root->right=insertIntoBST(root->right,val);
        }
        return root;
    }
};
 
收获
巩固了搜索树的知识




![[附源码]Python计算机毕业设计Django绿色生鲜](https://img-blog.csdnimg.cn/5a87e446a45a4dbb8f9a36002216f493.png)
![[附源码]JAVA毕业设计酒店管理系统(系统+LW)](https://img-blog.csdnimg.cn/7a1e8274ca0b4a3db69f7007dafc6d4e.png)

![[附源码]计算机毕业设计打印助手平台](https://img-blog.csdnimg.cn/4b43ce51576b42378c09cc1a8b2f127c.png)
![[附源码]计算机毕业设计基于springboot的旅游景点管理系统的设计与实现](https://img-blog.csdnimg.cn/59babe8ae1cb47beb7c71590a29e3c6a.png)








![[附源码]Python计算机毕业设计Django人事系统](https://img-blog.csdnimg.cn/26db9ae57ed14027b99d499358d5b11e.png)



