面试经典150题(90-92)

leetcode 150道题 计划花两个月时候刷完,今天(第四十八天)完成了3道(90-92)150:

90.(108. 将有序数组转换为二叉搜索树)题目描述:

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

第一版(就每次取数组中间坐标的数作为递归的新树的头结点就行)

class Solution {public TreeNode sortedArrayToBST(int[] nums) {int len=nums.length;if(len<=0){return null;}return buildTree(nums,0,nums.length-1);}public TreeNode buildTree(int[] nums,int start,int end){if(start>end){return null;}int headIndex=(end+start)/2;TreeNode head=new TreeNode(nums[headIndex]);head.left=buildTree(nums,start,headIndex-1);head.right=buildTree(nums,headIndex+1,end);return head;}
}

91.(148. 排序链表)题目描述:

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。
输入:head = [4,2,1,3]
输出:[1,2,3,4]
!!!是链表 不是数组

第一版(冒泡链表。。超时了)

class Solution {public ListNode sortList(ListNode head) {if(head==null){return head;}ListNode headTemp=head;while(headTemp!=null){ListNode min=headTemp;while(min.next!=null){if(headTemp.val>min.next.val){int val=min.next.val;min.next.val=headTemp.val;headTemp.val=val;}min=min.next;}headTemp=headTemp.next;}return head;}
}

第二版(看了解题,感觉是归并排序。。我就照着写了一下。。)

class Solution {public ListNode sortList(ListNode head) {return sortList(head,null);}public ListNode sortList(ListNode head,ListNode tail) {if(head==null){return head;}if(head.next==tail){head.next=null;return head;}// 快慢指针 求链表的中间节点ListNode slow=head,fast=head;while(fast!=tail){slow=slow.next;fast=fast.next;if(fast!=tail){fast=fast.next;}}ListNode mid=slow;ListNode list1=sortList(head,mid);ListNode list2=sortList(mid,tail);ListNode sorted=merge(list1,list2);return sorted;}public ListNode merge(ListNode list1,ListNode list2){ListNode dumpHead=new ListNode(0);ListNode temp=dumpHead,temp1=list1,temp2=list2;while(temp1!=null&&temp2!=null){if(temp1.val<temp2.val){temp.next=temp1;temp1=temp1.next;}else{temp.next=temp2;temp2=temp2.next;}temp=temp.next;}if(temp!=null){temp.next=temp1;}if(temp2!=null){temp.next=temp2;}return dumpHead.next;}
}

92.(427. 建立四叉树)题目描述:

给你一个 n * n 矩阵 grid ,矩阵由若干 01 组成。请你用四叉树表示该矩阵 grid 。
你需要返回能表示矩阵 grid 的 四叉树 的根结点。
四叉树数据结构中,每个内部节点只有四个子节点。此外,每个节点都有两个属性:
val:储存叶子结点所代表的区域的值。1 对应 True,0 对应 False。注意,当 isLeaf 为 False 时,你可以把 True 或者 False 赋值给节点,两种值都会被判题机制 接受 。
isLeaf: 当这个节点是一个叶子结点时为 True,如果它有 4 个子节点则为 False 。
class Node {public boolean val;public boolean isLeaf;public Node topLeft;public Node topRight;public Node bottomLeft;public Node bottomRight;
}
我们可以按以下步骤为二维区域构建四叉树:
如果当前网格的值相同(即,全为 0 或者全为 1),将 isLeaf 设为 True ,将 val 设为网格相应的值,并将四个子节点都设为 Null 然后停止。
如果当前网格的值不同,将 isLeaf 设为 False, 将 val 设为任意值,然后如下图所示,将当前网格划分为四个子网格。
使用适当的子网格递归每个子节点。

第一版(题目比较绕。。意思就是从中间分成四份,看他是不是根节点,四个块值都一样,那他就是叶子节点,不一样就是根节点,根节点的val 随便值就行,我自己写的啊第一版,我感觉无敌)


class Solution {public Node construct(int[][] grid) {return construct(grid,0,0,grid.length);}public Node construct(int[][] grid,int x,int y,int n) {if(n<1){return null;}Node head=new Node();head.topLeft=construct(grid,x,y,n/2);head.topRight=construct(grid,x,y+n/2,n/2);head.bottomLeft=construct(grid,x+n/2,y,n/2);head.bottomRight=construct(grid,x+n/2,y+n/2,n/2);if(head.topLeft==null||head.topRight==null||head.bottomLeft==null||head.bottomRight==null){head.isLeaf=true;head.val=grid[x][y]==1;}else{// 都是叶子节点了才去合并if(head.topLeft.isLeaf&&head.topRight.isLeaf&&head.bottomLeft.isLeaf&&head.bottomRight.isLeaf){if((Boolean.TRUE.equals(head.topLeft.val)&&Boolean.TRUE.equals(head.topRight.val)&&Boolean.TRUE.equals(head.bottomLeft.val)&&Boolean.TRUE.equals(head.bottomRight.val))||(Boolean.FALSE.equals(head.topLeft.val)&&Boolean.FALSE.equals(head.topRight.val)&&Boolean.FALSE.equals(head.bottomLeft.val)&&Boolean.FALSE.equals(head.bottomRight.val))){head.isLeaf=true;head.val=head.topLeft.val;head.topLeft=null;head.topRight=null;head.bottomLeft=null;head.bottomRight=null;}}           }return head;}
}

最后一个题把我的自信又提起来了。。。做了一个多小时但是也做出来了!!!

加油早日跳槽!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入Amazon S3:实战指南

Amazon S3(Simple Storage Service)是AWS(Amazon Web Services)提供的一项强大的云存储服务,广泛用于存储和检索各种类型的数据。本篇实战指南将深入介绍如何在实际项目中充分利用Amazon S3的功能,包括存储桶的创建、对象的管理、权限控制、版本控制、日志记录等方面的实…

ubuntu安装kibana

1、安装elastic search7 参考&#xff1a;elastic search入门-CSDN博客 2、安装kibana&#xff0c;版本对不上&#xff0c;不匹配&#xff0c;不能正常启动。 kibana要改成7.11.1版本的试试。 nohup wget https://artifacts.elastic.co/downloads/kibana/kibana-7.11.1-linu…

从0开始学习C++ 第一课:你的第一个C++程序

第一课&#xff1a;你的第一个C程序 当然可以。让我们从C的基础开始&#xff0c;我们的第一课将覆盖以下几个主题&#xff1a; 程序结构编写和运行你的第一个C程序基本的输入输出&#xff08;I/O&#xff09; 第一课&#xff1a;你的第一个C程序 在C中&#xff0c;所有的程…

Spring-配置文件

一、引子 了解完Spring的基本概念后&#xff0c;我们紧接着来了解Spring中的核心文件--Spring配置文件。 二、配置Bean 我们在上一节Spring的基本概念中快速使用了一下Spring&#xff0c;其中我们在配置文件中主要涉及到就是Bean标签的配置&#xff1a;主要的配置字段有id, …

Servlet系列:生命周期(init、 service、destroy)详解

Servlet的生命周期是由Web容器&#xff08;如Tomcat&#xff09;管理的&#xff0c;包括以下三个阶段&#xff1a; 加载和实例化&#xff1a;当Web应用程序启动时&#xff0c;Web容器会加载和实例化Servlet。加载和实例化过程可以在应用程序启动时自动完成&#xff0c;也可以通…

Mac上如何设置映射某个网站站点域名的IP

最近某常用的站点换 IP 了&#xff0c;但是 DNS 服务器还没有修改&#xff0c;这就导致无法访问&#xff08;换 DNS 服务器也不行&#xff09;。在用了一段时间的 IP 访问之后&#xff0c;还是没好&#xff0c;不知道是 DNS 污染还是咋了&#xff0c;所以最后还是手动改一下吧。…

MySQL定期整理磁盘碎片

MySQL定期整理磁盘碎片&#xff1a;提升数据库性能的终极指南 MySQL作为一个强大的关系型数据库管理系统&#xff0c;在长时间运行后可能会产生磁盘碎片&#xff0c;影响数据库性能。本博客将深入讨论如何定期整理MySQL磁盘碎片&#xff0c;以确保数据库的高效运行。我们将介绍…

mac滚动截图

参考博客 https://www.zhihu.com/question/313673726/answer/2938671835 首先去AppStore搜索 iShot 这个也是要钱的&#xff0c;不过我输入appleID后&#xff0c;并没有扣我钱&#xff0c;不知道设么回事 然后打开iShot 点击观看视频&#xff0c;然后mac会自动打开一个新的…

Softing mobiLink Power:集成FDI技术,简化多协议总线设备的配置方式

Softing的mobiLink Power是一款多协议总线通信工具&#xff0c;用于调试和维护过程自动化现场设备。目前&#xff0c;该工具已具备完整的FDI CommServer&#xff08;包括FF、PA、HART&#xff09;&#xff0c;并支持与FDI客户端一起使用&#xff0c;如艾默生的AMS Device Confi…

LeetCode 670 最大交换数

周一&#xff0c;非常冷&#xff0c;大风呼呼的&#xff0c;上班路都走不动。 好消息&#xff0c;马上要过年了。大风吹&#xff0c;天气好。 过年过年&#xff0c;回家过年~ 学生时代的迷茫是不应该存在的&#xff0c;最好的时光应该尽情享受&#xff0c;而不应该自己给加层…

西门子触摸屏维修6AV7880-0AA22-2DA2

西门子SIMATIC ITP1000平板PC机10.1 英寸采用 Intel Core i5 Skylake CPU&#xff0c;适合需要达16GB RAM的较高图形性能的工业移动计算应用。该 CPU 还提供了足够性能储备以满足将来的要求。安装的 Microsoft Windows 7 和 Microsoft Windows 10 操作系统以合理方式集成到现有…

68. redis计数与限流中incr+expire的坑以及解决办法(Lua+TTL)

文章目录 一、简介二、代码演进第一版代码&#xff08;存在bug隐患&#xff09;第二版代码&#xff08;几乎无隐患&#xff09;第三版代码(完美无瑕&#xff09; 一、简介 在日常工作中&#xff0c;经常会遇到对某种操作进行频次控制或者统计次数的需求&#xff0c;此时常用的…

RepLKNet 学习笔记

目录 原版测试代码: torch版本: RepLKNet 哔哩哔哩 原版测试代码: 1060显卡,224*224,平均时间10ms以内。 import timeimport torchfrom unireplknet import unireplknet_aif __name__ == __main__:net = unireplknet_a()net.cuda()net.eval()for i in range(20):

1411111111

第一张 用户管理表&#xff08;客户&#xff09; sys_user user_id 用户ID username 用户名 password 密码 phonenumber 电话 open_id 微信openID session_key 微信key user_type 管理员 维修员 客户 dept_id 部门ID 第五 维修人员表&#xff08;维修员&#xff09;sys_mainta…

深入了解Linux中常见的五种文件类型

了解文件类型对于正确理解和管理文件系统非常重要。希望本文能够帮助您更好地了解Linux中常见的文件类型及其在ls -l命令输出中的表示方式。​ 在Linux操作系统中&#xff0c;文件是操作系统中最基本的概念之一。在Linux中&#xff0c;每个文件都有一个特定的类型&#xff0c;这…

Elasticsearch分布式一致性原理剖析(一)-节点篇

前言 “Elasticsearch分布式一致性原理剖析”系列将会对Elasticsearch的分布式一致性原理进行详细的剖析&#xff0c;介绍其实现方式、原理以及其存在的问题等(基于6.2版本)。 ES目前是最流行的分布式搜索引擎系统&#xff0c;其使用Lucene作为单机存储引擎并提供强大的搜索查…

从0开始学习C++ 第二十课:模板与泛型编程

第二十课&#xff1a;模板与泛型编程 学习目标&#xff1a; 掌握模板的基本语法和概念。学会使用函数模板来创建可重用的函数。学习如何定义类模板以实现数据结构的泛型。理解模板在C中提供的灵活性和强大功能。 学习内容&#xff1a; 模板的概念&#xff1a; 模板是C中支持…

解决Git添加.gitignore文件后不生效的问题

1. 问题描述 如上图所示&#xff0c;在已存在.gitignore文件且已经提交过的Git管理的项目中&#xff0c;其中.class、.jar文件以及.idea目录内的内容全部都还是被Git管理了&#xff0c;可见.gitignore文件并没有生效。 2. 原因发现 .gitignore文件只能作用于 Untracked Files…

eNSP学习——配置通过FTP进行文件操作

原理概述&#xff1a; FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;是在TCP/IP网络和Internet上最早使用的协议之一&#xff0c;在TCP/IP协议族中属于应用层协议&#xff0c;是文件传输的Internet标准。主要功能是向用户提供本地和远程主机…

python--pyQt5 对话框使用(QInputDialog) PySide6

参考&#xff1a; https://www.cnblogs.com/XJT2018/p/10208710.html https://blog.csdn.net/panrenlong/article/details/79948261 含参数详解&#xff1a; https://blog.csdn.net/zhulove86/article/details/52515460 一、简介 QInputDialog类提供了一个简单的便捷对话框&a…