快过年静不下心?不如刷刷《剑指offer》静一静(第七天)

news2025/1/15 22:55:48

跟着博主一起刷题
这里使用的是题库:
https://leetcode.cn/problem-list/xb9nqhhg/?page=1这里是引用

目录

    • 剑指 Offer 49. 丑数
    • 剑指 Offer 51. 数组中的逆序对
    • 剑指 Offer 55 - I. 二叉树的深度

剑指 Offer 49. 丑数

剑指 Offer 49. 丑数
我一开始的思路是,把数字1~无穷的遍历,知道遍历n个丑数为止。那么怎么求一个数是不是丑数呢?丑数是只包含2,3,5的质因子,例如一个数位 2223355 我们先把2除完,再除完3,最后除完5看结果是不是1即可。代码:

private boolean isUgly(int n){
        if(n%2==0)return isUgly(n/2);
        if(n%3==0)return isUgly(n/3);
        if(n%5==0)return isUgly(n/5);
        return n==1;
    }

但是这种方法时间复杂度很高,结果就是时间超限了,我们得另寻方法。
上面的方法时间超限是判断了很多不是丑数的数字,有没有方法可以让我们自己造丑数呢?有的!初始的丑数 2 3 ,3后面的丑数是什么呢?我们发现22<5,所以是2 3 4,那么4后面的丑数是什么?发现23的相邻最小的丑数。什么意思呢?**意思就是我们可以通过初始的丑数,来推出之后的最小的丑数。**具体做法:
在这里插入图片描述

class Solution {
    public int nthUglyNumber(int n) {
        int p2=0,p3=0,p5=0;
        int[] ugly=new int[n];
        ugly[0]=1;
        for(int i=1;i<n;i++){
            int n2=ugly[p2]*2;
            int n3=ugly[p3]*3;
            int n5=ugly[p5]*5;
            int min=Math.min(n2,Math.min(n3,n5));
            if(n2==min)p2++;
            if(n3==min)p3++;
            if(n5==min)p5++;
            ugly[i]=min;
        }
        return ugly[n-1];
    }
}

剑指 Offer 51. 数组中的逆序对

剑指 Offer 51. 数组中的逆序对
如果我们一个一个比较时间一定会超限,因为时间复杂度是O(N^2)。注意看:
利用归并排序的性质
在这里插入图片描述

class Solution {
    private int count=0;
    private int[] nums,tmp;
    public int reversePairs(int[] nums) {
        this.nums=nums;
        tmp=new int[nums.length];
        if(nums.length!=0){
            merge(0,nums.length);
        }
        return count;
    }

    private void merge(int left,int right){
        if(left>=right-1)return;
        int mid=(right-left)/2+left;
        //左归
        merge(left,mid);
        //右归
        merge(mid,right);
        //合并
        for (int k = left; k < right; k++)
            tmp[k] = nums[k];
        int limitL=mid;
        int i=left;
        while(left<limitL&&mid<right){
            if(tmp[left]>tmp[mid]){
                nums[i]=tmp[left++];
                count+=right-mid;
            }else{
                nums[i]=tmp[mid++];
            }
            i++;
        }
        while(left<limitL){
            nums[i++]=tmp[left++];
        }
        while(mid<right){
            nums[i++]=tmp[mid++];
        }
    }
}

另外我发现,我拷贝nums数组到tmp时,如果使用Arrays.copyOf()就会时间超限
使用System.arraycopy()方法比直接for循环赋值也要慢。

剑指 Offer 55 - I. 二叉树的深度

剑指 Offer 55 - I. 二叉树的深度
遍历二叉树,每到一个结点,深度就取左右子树最长的那个。

class Solution {
    public int maxDepth(TreeNode root) {
        if(root==null)return 0;
        return Math.max(maxDepth(root.left),maxDepth(root.right))+1;
    }
}

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

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

相关文章

机器学习HW15元学习

文章目录一、简介Task: Few-shot Classification实验1、simple2、medium3、strong4、boss三、代码模型构建准备工作一、简介 任务对象是Omniglot数据集上的few-shot classification任务&#xff0c;内容是利用元学习找到好的初始化参数。 Task: Few-shot Classification The…

在VSCode中使用Compaq Visual Fortran编译运行Frotran程序

本片文章主要是为了使用VSCode编译运行带QuickWin的老版本Fortran代码。 一、准备工作 安装VSCode和Compaq Visual Fortran6.6。 二、配置Fortran工程 用VSCode打开保存有Frotran代码的文件夹 建立.vscode文件夹&#xff0c;建立launch.json和task.json文件&#xff0c;分…

二、TCP/IP---Ethernet和IP协议

TCP/ip协议栈 OSI模型TCP/IP协议栈应用层&#xff0c;表示层&#xff0c;会话层应用层传输层主机到主机层&#xff08;传输层&#xff09;网络层网络层数据链路层&#xff0c;物理层网络接入层 Ethernet协议 以太网&#xff0c;实现链路层的数据传输和地址封装&#xff08;MA…

马蹄集 三角形坐标

三角形坐标 难度&#xff1a;青铜 ○时间限制&#xff1a;1秒 巴占用内存&#xff1a;64M 输入三角形三个顶点A,B,C的坐标(x,y),根据公式计算并输出三 角形面积。 S1/2*X1y2X2y33y1-X1y3-X2y1-x3y2 #include <bits/stdc.h> using namespace std; int main(){double x[4],…

Win10应用商店无法加载错误0x80072F7D怎么办?

Win10应用商店无法加载错误0x80072F7D怎么办&#xff1f;有用户开启电脑的Win10软件商店想要获取软件的时候&#xff0c;发现软件页面无法进行正常的加载&#xff0c;里面的内容显示为错误代码0x80072F7D。那么这个情况怎么去进行解决呢&#xff1f;一起来看看详细的解决方法分…

PMP证书到期了,有必要续吗?

我觉得续证是有需要的&#xff0c;毕竟证书有用的地方很多。 下面我们将从两方面分享&#xff1a; 1. PMP 证书在国内的含金量怎么样&#xff1f; 2. HR 如何看待 PMP 证书&#xff1f; 说到 PMP 证书的含金量&#xff0c;相信这个问题是所有人都关心的。对于如何来评判 PMP…

达芬奇密码题解

题目信息达芬奇隐藏在蒙娜丽莎中的数字列:1 233 3 2584 1346269 144 5 196418 21 1597 610 377 10946 89 514229 987 8 55 6765 2178309 121393 317811 46368 4181 1 832040 2 28657 75025 34 13 17711 记录在达芬奇窗台口的神秘数字串:36968853882116725547342176952286这道题…

Vue3——第十章(异步组件:defineAsyncComponent)

一、defineAsyncComponent基本使用 在大型项目中&#xff0c;我们可能需要拆分应用为更小的块&#xff0c;并仅在需要时再从服务器加载相关组件。Vue 提供了 defineAsyncComponent 方法来实现此功能&#xff1a; 如你所见&#xff0c;defineAsyncComponent 方法接收一个返回 P…

文档流code案例小汇【处理高度塌陷】

clear mdn文档 clear只是清除浮动&#xff0c;不能缓解【高度塌陷】 https://developer.mozilla.org/zh-CN/docs/Web/CSS/clear 值 none 元素不会被向下移动以清除浮动。left 元素被向下移动以清除左浮动。right 元素被向下移动以清除右浮动。both 元素被向下移动以清除左右浮动…

LeetCode刷题模版:61 - 70

目录 简介61. 旋转链表62. 不同路径63. 不同路径 II64. 最小路径和65. 有效数字【未理解】66. 加一67. 二进制求和68. 文本左右对齐【未实现】69. x 的平方根70. 爬楼梯结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:…

1月第1周榜单丨B站UP主排行榜(飞瓜数据B站)发布!

飞瓜轻数发布2023年1月2日-1月8日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B站…

Web(四)

基本对象&#xff1a;1. Function&#xff1a;函数(方法)对象创建&#xff1a;1. var fun new Function(形式参数列表,方法体); //忘掉吧2. function 方法名称(形式参数列表){方法体}3. var 方法名 function(形式参数列表){方法体}既是方法也是对象&#xff0c;不传或者参数不…

PyG Temporal搭建STGCN实现多变量输入多变量输出时间序列预测

目录I. 前言II. STGCNIII. PyG TemporalIV. 模型训练/测试V. 代码I. 前言 前面已经写过不少时间序列预测的文章&#xff1a; 深入理解PyTorch中LSTM的输入和输出&#xff08;从input输入到Linear输出&#xff09;PyTorch搭建LSTM实现时间序列预测&#xff08;负荷预测&#x…

C++——类和对象1

目录 1. 类和对象认识 2. 类的引入 3. 类的定义 4. 类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化 7. 类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规则 8. this指针 8.1 this指针的…

cv-cuda (cvcuda、nvcv)教程——Python安装

由于当前版本安装后&#xff0c;大家反应import nvcv cvcuda 失败&#xff0c;看官方文档&#xff0c;当前还不是很规范&#xff0c;特此记录当前版本的安装方法。 官方安装文档&#xff1a;Installation — CV-CUDA Alpha documentation 方法一、如果你有权限推荐deb安装方式…

机器学习第15章-规则学习

机器学习第15章-规则学习 以下列出我觉得重要&#xff0c;在编码的思路中可以参考的地方 冲突消融 当一条规则的判断出现不同的结果时&#xff0c;解决冲突的方法 1.投票法 2.排序法 3.无规则法 序贯覆盖 生成规则过程中去除当前规则所能覆盖的数据 生成方式 自顶向下…

双软认证的好处,赶紧来看看吧

1、“双软件”认可对企业有什么好处&#xff1f; 对于认定的软件企业&#xff0c;从盈利年度起&#xff0c;第一年和第二年免征企业所得税&#xff0c;第三年至第五年减半征收企业所得税&#xff0c;即两免三减。对认定软件产品的企业&#xff0c;对实际增值税负担超过3%的部分…

【ONE·C++ || vector (二)】

总言 主要讲述vector的模拟实现。 文章目录总言1、基本框架搭建&#xff1a;成员变量2、对构造函数、析构函数3、增删查改、空间扩容3.1、vector::push_back、vector::pop_back3.2、vector::reserve、vector::capacity、vector::size3.3、operator[ ]3.4、遍历&#xff1a;迭代…

记录robosense RS-LIDAR-16使用过程1

拿到设备&#xff0c;首先对照型号去官网下载相关资料&#xff08;用户手册/软件/SDK&#xff09;,需要填写资料https://www.robosense.ai/resources-27工业相机通常也有出厂SDK文件&#xff0c;之前有使用知微传感的D130相机&#xff0c;也是先安装SDK、看手册然后使用。大型厂…

【Java集合】Map接口常用方法及实现子类

文章目录01 Map 接口实现类的特点02 Map 接口和常用方法03 Map 接口遍历方法04 HashMap 用例 小结05 HashMap 底层&扩容机制06 Hashtable07 PropertiesMap为双列集合&#xff0c;Set集合的底层也是Map&#xff0c;只不过有一列是常量所占&#xff0c;只使用到了一列。 01 …