leetcode小结(龟速刷新)

08.16

https://leetcode.com/problems/minimum-depth-of-binary-tree/description/

111. Minimum Depth of Binary Tree

Given a binary tree, find its minimum depth.

The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.

DFS (Depth First Search)

 1 int minDepth(struct TreeNode* root) {
 2     int leftMin, rightMin, min;
 3
 4     if (root == NULL) {
 5         return 0;
 6     }
 7     leftMin = minDepth(root->left);
 8     rightMin = minDepth(root->right);
 9     if (leftMin == 0) {
10         min = rightMin;
11     }
12     else if (rightMin == 0) {
13         min = leftMin;
14     }
15     else {
16         min = leftMin < rightMin ? leftMin : rightMin;
17     }
18     return (min + 1);
19 }

耗时9ms。

看到这个解法https://discuss.leetcode.com/topic/8723/my-4-line-java-solution后,修改如下,耗时6ms。耗时节省33%的关键在于将两个if合并为一个if,可能这样生成的指令较少。

int minDepth(struct TreeNode* root) {
    int leftMin, rightMin;

    if (root == NULL) {
        return 0;
    }
    leftMin = minDepth(root->left);
    rightMin = minDepth(root->right);
    if (leftMin == 0 || rightMin == 0) {
        return leftMin + rightMin + 1;
    }
    else {
        return (leftMin < rightMin ? leftMin : rightMin) + 1;
    }
}

BFS(Breadth First Search)

同样耗时9ms,采用类似如上修改后,耗时为6ms。我采用的不是典型的队列。

int minDepth(struct TreeNode* root) {
    struct TreeNode** nodeRow;
    int depth, len, size, i, j;
    if (root == NULL) {
        return 0;
    }
    size = 1024;
    nodeRow = malloc(sizeof(struct TreeNode*) * size);
    nodeRow[0] = root;
    len = 1;
    for (depth = 1; ; depth++){
        for (i = 0, j = len; i < len; i++) {
            if (nodeRow[i]->left == NULL) {
                if (nodeRow[i]->right == NULL) {
                    goto done;
                }
                nodeRow[i] = nodeRow[i]->right;
            }
            else {
                if (nodeRow[i]->right != NULL) {
                    if (j >= size) {
                        size *= 2;
                        nodeRow = realloc(nodeRow, sizeof(struct TreeNode*) * size);
                        /* error checking */
                    }
                    nodeRow[j++] = nodeRow[i]->right;
                }
                nodeRow[i] = nodeRow[i]->left;
            }
        }
        len = j;
    }
done:
    free(nodeRow);
    return depth;
}

int minDepth(struct TreeNode* root) {
    struct TreeNode** nodeRow;
    struct TreeNode* lChild, * rChild;
    int depth, len, size, i, j, flag;
    if (root == NULL) {
        return 0;
    }
    size = 1024;
    nodeRow = malloc(sizeof(struct TreeNode*) * size);
    nodeRow[0] = root;
    len = 1;
    j = len;
    for (depth = 1; ; depth++){
        for (i = 0; i < len; i++) {
            flag = (nodeRow[i]->left == NULL ? 0 : 2) |
                    (nodeRow[i]->right == NULL ? 0 : 1);
            switch(flag) {
            case 3:
                if (j >= size) {
                    size *= 2;
                    nodeRow = realloc(nodeRow, sizeof(struct TreeNode*) * size);
                    /* error checking */
                }
                nodeRow[j++] = nodeRow[i]->right;
                nodeRow[i] = nodeRow[i]->left;
                break;
            case 2:
                nodeRow[i] = nodeRow[i]->left;
                break;
            case 1:
                nodeRow[i] = nodeRow[i]->right;
                break;
            default: /* least probability */
                goto done;
            }
        }
        len = j;
    }
done:
    free(nodeRow);
    return depth;
}

6ms的排名是33.11% (Your time beats 33.11% of c submissions),不知道进一步怎么优化。

时间: 2024-10-08 03:04:42

leetcode小结(龟速刷新)的相关文章

第一次刷leetcode小结

LeetCode 上不会的 Reverse Integer Single Number II 斐波那契数列 非递归算法 Maximum Subarray 维持最大值 Integer to Roman Sort Colors Populating Next Right Pointers in Each Node 怎么样控制一层 Gray Code Generate Parentheses Binary Tree Postorder Traversal Best Time to Buy and Se

ceph 部署后rbd块设备读写只有10M左右,慢的更龟速一样,怎样解决!,求各位博友指点……,感激不尽……

1先描述下我的部署环境: 2台OSD,1台monitor,1台管理服务器,1台client,都是24核,64G内存,1.6T的SSD闪存卡,千兆网卡:目前安装的ceph版本是 0.94.7. 2 目前的现状 我用dd命令写5G数据,使用iostat 观察到%util 立马100%呀,同时await指标都是4000多,而且此时网络带宽也才使用10M左右. 使用fio工具顺序写1G的数据,测试出的bw只有7M多,iops只有800多, fio --name=seqWrite --filename=/

linux指令快速复制粘贴[龟速更新中]

由于有经常碰到要输入linux指令,但是却忘记了的情况.在家里我把常用的命令放到Xshell的快速命令集,但是在很多情况下不在家,可能用的他人电脑,以及在非Win环境下使用ssh时没有xshell使用,就会遇到查找配置文件地址.指令参数忘记等等情况,故将本人常用的指令写成Blog形式,可以随时的复杂.粘贴. 复制指令 复制文件夹含子目录 cp –r iptables iptables配置文件目录 /etc/sysconfig/iptables 开启iptables systemctl start

Android studio更新版本后Gradle sync简直是龟速,接下来让我们快速Gradle sync

绝对不是访问下载网址慢的原因 问题 首先,我们接受了Android Studio新版本的更新,然后很自然地打开了我们之前的项目工程. 当遇到Gradle也要更新时,这时就非常蛋疼了,刚打开的工程一直在Gradle sync中. 解决方案 所以我想,既然Android Studio下载这么慢,还不如我单独下载这个gradle-3.3-all.zip,再放到相应的目录,然后解压就可以了. 可以参考以前的版本一下. 如果是自己下载,毕竟会快点, 下载网址:https://services.gradle

C#在工作线程刷新主界面控件状态小结,单例模式、委托

今日项目开发中需要在服务器界面实时显示客户端连接状态,使用C#的反射机制解决了问题.由于项目比较复杂,现结合一个小例子,对使用C#委托反射机制刷新主界面上的控件状态进行简单小结,希望对新手有所帮助. 一.新建一个C# winform工程:Form_MainUI,界面布局如图1. 代码如下: 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data;

学习拓展中国剩余定理小结

前言 话说中国剩余定理好早就会了,但是一直木有接触过拓展的. 只知道它是个什么东东. 最近似乎需要它了,稍微学了学,似乎还挺简单的. 小结一下~ 简介 中国剩余定理我们都懂吧? 而拓展则是把它后面的模数变成一个非质数,(当然,各个方程的模数互质). 然后求出最小的x的解. 做法 似乎拓展之后很难用原来的套路来搞了. 怎么办? 我们发现,我们可以利用一些奇怪的推柿子大法来合并柿子. 考虑合并一下两个柿子: \(x \equiv c1 (mod\ m1)\) \(x \equiv c2 (mod\

矩阵快速幂的一份小结

矩阵真是个好东西!虽然矩乘的复杂度有点难看... ... 这几天也做了不少矩阵题目,还是有几道好题目的.不过我打算从入门开始. 矩阵乘法:A[i][k]*B[k][j]=C[i][j];(A的第i行的每项依次乘以B的第j列的每项的和) 很显然这是一个n^3的算法,还是比较难看的. 代码就差不多是这样了. struct Matrix{int T[51][51];}; Matrix Mul(Matrix a,Matrix b,int I,int K,int J) { Matrix S=S0; for

H5下拉刷新和上拉加载实现原理浅析

前言 在移动端H5网页中,下拉刷新和上拉加载更多数据的交互方式出现频率很高,开源社区也有很多类似的解决方案,如iscroll,pulltorefresh.js库等.下面是对这两种常见交互基本实现原理的阐述. 实现原理 下拉刷新 实现下拉刷新主要分为三步: 监听原生touchstart事件,记录其初始位置的值,e.touches[0].pageY: 监听原生touchmove事件,记录并计算当前滑动的位置值与初始位置值的差值,大于0表示向下拉动,并借助CSS3的translateY属性使元素跟随手

Voyager的数据库操作与Bread Builder,解决国内打开网速超级慢的问题

Products表的创建: Bread Builder 伟大的XX封了谷哥,所以有关网站实在是打不开,正准备放弃的时候,突然发现问题了,对就是这个网站ajax.googleapis.com,由于调用的都是上面的jquery和jqueryUI,这个龟速的问题突然找到了! 原文地址:https://www.cnblogs.com/carious/p/10111351.html