last

671. Second Minimum Node In a Binary Tree

谁都会走 提交于 2020-01-14 02:15:05
671. 二叉树中第二小的节点 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0 。如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值。 给出这样的一个二叉树,你需要输出所有节点中的 第二小的值。 如果第二小的值不存在的话,输出 -1 。 示例 1: 输入: 2 / \ 2 5 / \ 5 7 输出: 5 说明: 最小的值是 2 ,第二小的值是 5 。 示例 2: 输入: 2 / \ 2 2 输出: -1 说明: 最小的值是 2, 但是不存在第二小的值。 解法一 //时间复杂度O(nlogn), 空间复杂度O(logn) /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: int pcldown(TreeNode*& root) { if(!root) return -1; int ret = root->val; if(!root->left && !root->right) { root

new与malloc

强颜欢笑 提交于 2020-01-13 13:20:20
首先将new与malloc的区别总结如下: 1 new可以自动计算需要分配多大的内存,而malloc必须指明。 2 new返回的指针是有类型的,malloc返回void*类型的指针。 3 new在分配内存的同时会调用构造函数。 4 new是c++运算符,malloc是标准库函数。 由于3所述,malloc在c++中无法满足为非内部对象分配内存的需求。 那么malloc是如何进行内存分配的呢?它将内存块连接为一个链表。调用malloc函数时,它沿链表寻找一个大到足以满足用户请求所需要的空闲内存块。然后,将该内存块传给用户(如果该内存块比用户申请的内存大很多,可进行分割),并将该内存块标记为已用。(free的过程待补充) malloc具体实现参考: http://blog.codinglabs.org/articles/a-malloc-tutorial.html 该文对Linux系统内存相关知识的介绍也十分清楚。现将其malloc实现简单总结如下: 内存按块划分,每个块由meta区和数据区组成,meta区记录数据区的大小、是否空闲并指向下一个内存块。数据区是真实分配的内存,malloc返回给用户的就是数据区的首地址。首先定义表示内存块的数据结构: typedef struct s_block* t_block; struct s_block { size_t size; int

单向环形链表实现及约瑟夫问题解决方案

冷暖自知 提交于 2020-01-13 08:43:03
实现类: package demo03_LinkedList ; import java . util . Iterator ; public class CircleSingleLinkedList < T > implements Iterable < T > { private Node < T > first ; private Node < T > last ; private int size = 0 ; public CircleSingleLinkedList ( ) { } public CircleSingleLinkedList ( T elem ) { this . first = new Node < > ( ) ; first . temp = elem ; first . next = first ; last = first ; size ++ ; } // 添加元素 public void add ( T elem ) { if ( size == 0 ) { first = new Node < > ( ) ; first . temp = elem ; first . next = first ; last = first ; size ++ ; } else { Node < T > node = new Node < > ( ) ;

zabbix笔记之计算型监控项详解

我只是一个虾纸丫 提交于 2020-01-12 19:29:41
计算型监控项 有时候会有这样一个需求,需要监控总的磁盘容量,总的网卡流量,可以只有往往只有单个网卡的流量,单个分区的使用情况。 计算型类型的item 新建一个item Formula:last("10.10.1.112:net.if.in[ifHCInOctets.27]",0)+last("10.10.1.112:net.if.out[ifHCOutOctets.27]",0) 查看最新数据 这里最关键的是Formula表达式,last是func函数,func主要有last,min,max,avg,count,10.10.1.112是监控主机的hostname net.if.in[ifHCInOctets.27] 是监控项item的key,值的类型一定要是数字!! +是运算符,可以是+-*/ 为了避免不正确的解析,请使用一对双引号"",如果key中有双引号,请使用斜杠\转义 来源: https://www.cnblogs.com/zhangcheng94/p/12184368.html

《Python编程:从入门到实践》读书笔记——第8章:函数

五迷三道 提交于 2020-01-12 03:50:38
目录 定义函数 向函数传递信息 传递实参 位置实参 关键字实参 默认值 避免实参错误 返回值 返回简单值 让实参变成可选 将函数与while循环结合 传递列表 在函数中修改列表 禁止函数修改列表 传递任意数量的实参 结合使用位置实参和任意数量实参 使用任意数量的关键字实参 将函数存储在模块中 导入整个模块 导入特定函数 使用as给函数指定别名 使用as给模块指定别名 导入模块中的所有函数 函数编写指南 定义函数 函数是带名字的代码块,用于完成具体的任务。 当需要在程序中执行同一项任务时,无需反复编写完成该任务的代码,而只需调用执行该任务的函数,让Python运行其中的代码。 ** greeter . py ** def greet_user ( ) : """显示简单的问候语""" print ( 'Hello!' ) greet_user ( ) Hello! 在上例中使用关键词def定义了一个函数。函数名为greet_user,后面的括号内是填入函数为完成其任务需要填入的信息,当其不需要任何信息就能完成任务时,括号内可以为空。最后定义以冒号结尾。 在def greet_user():后面的所有缩进构成一个函数体。由三个引号括起来的是称为文档字符串的注释。 调用函数,可依次指定函数名以及用括号括起的必要信息,如greet_user()。 向函数传递信息 可以在定义函数时添加变量

【翻译】std::remove - C++ Reference

 ̄綄美尐妖づ 提交于 2020-01-12 00:12:43
   函数模板   std:: remove                     头文件<algorithm> template <class ForwardIterator, class T> ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val);   从一个范围中删除某值   [注释:本文是 std::remove 算法的参考手册,关于 <cstdio.h> 头文件下的 remove 函数,请参见: http://www.cplusplus.com/reference/cstdio/remove/ ]   对范围 [first , last ) 进行转换(transform),移除其中所有与 val 相等的元素,返回一个指向新范围的 end 的迭代器。   (译注:transform 是 STL 的一个算法,不知道 std::remove 的底层是否经由 std::transform 实现。)   函数不改变所包含的“范围对象”的属性(换句话说,函数不改变数组或者容器的真实 size ):元素被移动是通过下一个不等于 val 的元素,来替换当前等于 val 的元素,而且会通过返回一个指向新 end 的迭代器,来指示出新的稍“短”一些的范围

【linux】linux shell 日期格式化

雨燕双飞 提交于 2020-01-12 00:07:59
获得当天的日期 date +%Y-%m-%d 输出: 2011-07-28 将当前日期赋值给DATE变量 DATE=$(date +%Y%m%d) 有时候我们需要使用今天之前或者往后的日期,这时可以使用date的 -d参数 获取明天的日期 date -d next-day +%Y%m%d 获取昨天的日期 date -d last-day +%Y%m%d 获取上个月的年和月 date -d last-month +%Y%m 获取下个月的年和月 date -d next-month +%Y%m 获取明年的年份 date -d next-year +%Y 下面是一些date参数的说明和一些例子 名称 : date 使用权限 : 所有使用者 使用方式 : date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]] 说明 : date 能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 : 时间方面 : % : 印出 % %n : 下一行 %t : 跳格 %H : 小时(00..23)

动态规划-Last Stone Weight II

谁说胖子不能爱 提交于 2020-01-11 18:31:21
2020-01-11 17:47:59 问题描述: 问题求解: 本题和另一题target sum非常类似。target sum的要求是在一个数组中随机添加正负号,使得最终得到的结果是target,这个题目被证明和背包问题是同一个问题,只是需要进行一下转化。 本题其实也是一个套壳题目,只是这次的壳套的更加隐蔽,对于本题来说,其实核心就是将其划分成两个堆,我们需要的是两堆的diff最小。 那么就需要另一个技巧了,我们不会直接使用dp去求这个最小值,而是使用dp去判断对于小堆中的和的可能性,最后在遍历检索一遍得到最小的diff即可。 public int lastStoneWeightII(int[] stones) { int n = stones.length; int sum = 0; for (int num : stones) sum += num; int[] dp= new int[sum / 2 + 1]; dp[0] = 1; for (int i = 0; i < n; i++) { for (int w = sum / 2; w >= 0; w--) { if (stones[i] <= w) dp[w] = dp[w] + dp[w - stones[i]]; } } int res = Integer.MAX_VALUE; for (int i = 0; i <

R语言 substring() 函数 :提取字符串的一部分

末鹿安然 提交于 2020-01-11 06:09:27
substring()函数的基本语法是: substring(x,first,last) 以下是所使用的参数的说明: x - 是字符向量输入。 first - 是第一个字符要被提取的位置。 last - 是最后一个字符要被提取的位置。 eg. result <- substring(“Extract”, 5, 7) print(result) 当我们上面的代码执行时,它产生以下结果: [1] “act” 来源: CSDN 作者: 铃儿响叮当1987 链接: https://blog.csdn.net/weixin_44612629/article/details/103906953

Linux在shell中获取时间

人走茶凉 提交于 2020-01-11 04:10:14
获得当天的日期 date +%Y-%m-%d 输出: 2011-07-28 将当前日期赋值给DATE变量 DATE=$(date +%Y%m%d) 有时候我们需要使用今天之前或者往后的日期,这时可以使用date的 -d参数 获取明天的日期 date -d next-day +%Y%m%d 获取昨天的日期 date -d last-day +%Y%m%d 获取上个月的年和月 date -d last-month +%Y%m 获取下个月的年和月 date -d next-month +%Y%m 获取明年的年份 date -d next-year +%Y 下面是一些date参数的说明和一些例子 名称 : date 使用权限 : 所有使用者 使用方式 : date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]] 说明 : date 能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 : 时间方面 : % : 印出 % %n : 下一行 %t : 跳格 %H : 小时(00..23)