max函数

realpath函数使用注意事项

不问归期 提交于 2020-01-17 21:57:40
必须使用PATH_MAX大小的内存空间,否则是非常不安全,在某些设备上经过验证,哪怕是PATH_MAX-1都会崩溃。正如使用如下: char file_path[PATH_MAX]; memset(file_path, 0, sizeof(file_path)); realpath("/proc/self/exe", file_path); 函数 严重性 解决方案 gets 最危险 使用 fgets(buf, size, stdin)。这几乎总是一个大问题! strcpy 很危险 改为使用 strncpy。 strcat 很危险 改为使用 strncat。 sprintf 很危险 改为使用 snprintf,或者使用精度说明符。 scanf 很危险 使用精度说明符,或自己进行解析。 sscanf 很危险 使用精度说明符,或自己进行解析。 fscanf 很危险 使用精度说明符,或自己进行解析。 vfscanf 很危险 使用精度说明符,或自己进行解析。 vsprintf 很危险 改为使用 vsnprintf,或者使用精度说明符。 vscanf 很危险 使用精度说明符,或自己进行解析。 vsscanf 很危险 使用精度说明符,或自己进行解析。 streadd 很危险 确保分配的目的地参数大小是源参数大小的四倍。 strecpy 很危险 确保分配的目的地参数大小是源参数大小的四倍。

FJUT-1370 记录一次解题过程

耗尽温柔 提交于 2020-01-16 16:02:14
题目在 福工院的1370 首先看题目,好家伙,全英文 那么大致的题意就是。有几个城市同在一条线上(相当于在x轴上),max i是第i个城市到其他所有城市的距离中的最大值,min i也就是所有中最小的。 再看输入 第一行输入一个n( 2 ≤  n  ≤ 10 5 ) ,代表城市数量。第二行有n个数: x 1 ,  x 2 , ...,  x n (  - 10 9  ≤  x i  ≤ 10 9 ),代表每个城市的横坐标。 看一下输出 输出n行,每行输出两个数,代表第i个城市到其他所有城市的距离最小值min i、最大值max i。 那么,这道题是想干什么呢? 就是给你n个在x轴上的点,x坐标告诉你了,求每个点距离其他点的最小值与最大值。 读懂了题,那就比较好写了。 首先读入每个城市横坐标 for(i=0; i<n; i++) { cin>>x[i]; } 然后接下来分别求出每个max、min就可以了 for(i=0; i<n; i++) { int max=0; int min=inf; for(j=0; j<n; j++) { if(abs(x[i]-x[j])>max&&i!=j) max=abs(x[i]-x[j]); if(abs(x[i]-x[j])<min&&i!=j) min=abs(x[i]-x[j]); } cout<<min<<" "<<max<<endl; }

leetcode 321 Create Max Number

前提是你 提交于 2020-01-13 05:10:31
leetcode 321 Create Max Number greedy的方法,由于有两个数组,我们很自然的想到从数组1中选i个数,数组2中选k-i个数,这样我们只需要遍历max(0, k-数组2长度n) ~ 数组1长度,然后保存合并i和k-i这两个部分之后得到的最大值即可。 那么还剩下这几个问题: 1) 从一个数组中不改变元素顺序地选出i个元素,使他们顺序排列代表的十进制数最大。例:[1,4,3,6,2], i = 3, 结果为[4,6,2] 2) 如何合并数组1的i个元素和数组2的k-i个元素 3) 比较两个数组所代表的十进制数的大小 第一个问题,我们需要使用栈的概念,遍历数组,每次比较栈顶元素与当前元素i,若i比栈顶元素大,则pop栈顶,继续比较,直到栈空或者i比栈顶元素小。注意,我们还需要时刻检测,i之后的元素是否足够补上pop出栈的空缺,若不够则不能再pop。例:[1,4,3,6,2], 当index为3时,栈中有[4,3],6和3比,大于,弹出3,继续比4,大于,这时候却不能弹出4,因为6后面只有一个数,不够补上pop2次的空缺。 第二个问题,分别用两个index i, j指向数组1和2,比较他们指向的元素,将大的元素放入新的大小为k的数组。注意,如何比较呢?可能指向元素相等,可能某一个数组已经到头了。详细过程在第三个问题列出 第三个问题,如何比较

LightGBM源码如何计算增益

半世苍凉 提交于 2020-01-09 19:22:38
在之前的 XGBoost原理理解 中已经推导过XGBoost的决策树的分裂增益为 L s p l i t = 1 2 [ ( ∑ i ∈ I L g i ) 2 ∑ i ∈ I L h i + λ + ( ∑ i ∈ I R g i ) 2 ∑ i ∈ I R h i + λ − ( ∑ i ∈ I g i ) 2 ∑ i ∈ I h i + λ ] − γ \mathcal{L}_{split}={1\over2}\bigg[{(\sum_{i\in I_L}g_i)^2\over \sum_{i\in I_L}h_i+\lambda}+{(\sum_{i\in I_R}g_i)^2\over \sum_{i\in I_R}h_i+\lambda}-{(\sum_{i\in I}g_i)^2\over \sum_{i\in I}h_i+\lambda}\bigg]-\gamma L s p l i t ​ = 2 1 ​ [ ∑ i ∈ I L ​ ​ h i ​ + λ ( ∑ i ∈ I L ​ ​ g i ​ ) 2 ​ + ∑ i ∈ I R ​ ​ h i ​ + λ ( ∑ i ∈ I R ​ ​ g i ​ ) 2 ​ − ∑ i ∈ I ​ h i ​ + λ ( ∑ i ∈ I ​ g i ​ ) 2 ​ ] − γ 其中 λ \lambda λ

C#高级参数out,ref,params

落花浮王杯 提交于 2020-01-05 22:01:33
在C#中通过使用方法来获取返回值时,通常只能得到一个返回值。因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢? out 当需要返回一系列返回值时可用out高级参数,必须在调用函数内赋值。 ref 不需要返回值的情况下改变变量值,必须在调用函数外部赋值。 举例说明: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Wolfy.RefAndOut { class Program { static void Main(string[] args) { int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; float avg;//在使用out关键字时,不需要在此处初始化,初始化也不会影响到方法内部的值,所以你初始化没用 int max; int min; int sum = GetIntResult(arr, out avg, out max, out min); Console.WriteLine("和:{0}\t平均值:{1}\t最大值:{2}\t最小值:{3}", sum, avg, max, min);

多项式插值

浪子不回头ぞ 提交于 2019-12-28 19:30:15
  1.多项式插值函数 %%多项式插值 %%说明:precision为精度,越大则图像越精细,attribute是属性值,当未知函数表达式但已知函数值时为1,否则为0 function PI = Polynomial_interpolation(f,X,precision,attribute) X = sort(X); if attribute == 0 [m,n] = size(X);MAX = max([m,n]); X = reshape(X,1,MAX);error = []; for i = 1:MAX Y(i) = subs(f,X(i)); end Y_value =double(Y); a = min(X);b = max(X); t = a:(b-a)/precision:b; T = zeros(1,precision+1); Yreal = subs(f,t); Coe = vpa(Polynomial_interpolation_cofficient(f,X,attribute),4); for i = 1:1:precision+1 T(i) = Polynomial_value(Coe,t(i)); end for i=1:MAX error(i) = abs(Y(i)-Polynomial_value(Coe,X(i))); end %%作图 h

SQL中MAX()和MIN()函数的使用

一曲冷凌霜 提交于 2019-12-26 16:05:23
在 SQL 数据库中,最大/最小值函数—MAX()/MIN()是经常要用到的,下面就将为您分别介绍MAX()函数和MIN()函数的使用,供您参考,希望对您学习SQL数据库能有些帮助。 当需要了解一列中的最大值时,可以使用MAX()函数;同样,当需要了解一列中的最小值时,可以使用MIN()函数。语法如下。 SELECT MAX (column_name) / MIN (column_name) FROM table_name 说明:列column_name中的数据可以是数值、字符串或是日期时间数据类型。MAX()/MIN()函数将返回与被传递的列同一数据类型的单一值。 实例7 MAX()函数的使用 查询TEACHER表中教师的最大年龄。实例代码: SELECT MAX (AGE) AS MAXAGE FROM TEACHER 运行结果如图1示。 图1TEACHER表中教师的最大年龄 实例8 在WHERE子句中使用子查询返回最大值 查询TEACHER表中年纪最大的教师的教工号、姓名、性别等信息。 实例代码: SELECT TNAME, DNAME, TSEX, SAL, AGE FROM TEACHER WHERE AGE=(SELECT MAX (AGE) FROM TEACHER) 运行结果如图2示。 图2在WHERE子句中使用子查询返回最大值 MAX()和MIN(

SQL中MAX()和MIN()函数的使用

痞子三分冷 提交于 2019-12-26 16:04:33
在 SQL 数据库中,最大/最小值函数—MAX()/MIN()是经常要用到的,下面就将为您分别介绍MAX()函数和MIN()函数的使用,供您参考,希望对您学习SQL数据库能有些帮助。 当需要了解一列中的最大值时,可以使用MAX()函数;同样,当需要了解一列中的最小值时,可以使用MIN()函数。语法如下。 SELECT MAX (column_name) / MIN (column_name) FROM table_name 说明:列column_name中的数据可以是数值、字符串或是日期时间数据类型。MAX()/MIN()函数将返回与被传递的列同一数据类型的单一值。 实例7 MAX()函数的使用 查询TEACHER表中教师的最大年龄。实例代码: SELECT MAX (AGE) AS MAXAGE FROM TEACHER 运行结果如图1示。 图1TEACHER表中教师的最大年龄 然而,在实际应用中得到这个结果并不是特别有用,因为经常想要获得的信息是具有最大年龄的教师的教工号、姓名、性别等信息。 然而SQL不支持如下的SELECT语句。 SELECT TNAME, DNAME, TSEX, MAX (AGE) FROM TEACHER 因为聚合函数处理的是数据组,在本例中,MAX函数将整个TEACHER表看成一组,而TNAME、DNAME和TSEX的数据都没有进行任何分组

oracle max()函数和min()函数

我的未来我决定 提交于 2019-12-26 16:04:06
当需要了解一列中的最大值时,可以使用MAX()函数;同样,当需要了解一列中的最小值时,可以使用MIN()函数。语法如下。 SELECT MAX (column_name) / MIN (column_name) FROM table_name 说明:列column_name中的数据可以是数值、字符串或是日期时间数据类型。MAX()/MIN()函数将返回与被传递的列同一数据类型的单一值。 实例7 MAX()函数的使用 查询TEACHER表中教师的最大年龄。实例代码: SELECT MAX (AGE) AS MAXAGE FROM TEACHER 运行结果如图1示。 图1TEACHER表中教师的最大年龄 然而,在实际应用中得到这个结果并不是特别有用,因为经常想要获得的信息是具有最大年龄的教师的教工号、姓名、性别等信息。 然而SQL不支持如下的SELECT语句。 SELECT TNAME, DNAME, TSEX, MAX (AGE) FROM TEACHER 因为聚合函数处理的是数据组,在本例中,MAX函数将整个TEACHER表看成一组,而TNAME、DNAME和TSEX的数据都没有进行任何分组,因此SELECT语句没有逻辑意义。同样的道理,下面的代码也是无效的。 SELECT TNAME, DNAME, TSEX,SAL ,AGE FROM TEACHER WHERE AGE=MAX

DP——最长上升子序列(LIS)

白昼怎懂夜的黑 提交于 2019-12-25 03:13:29
DP——最长上升子序列(LIS) 基本定义: 一个序列中最长的单调递增的子序列 ,字符子序列指的是字符串中不一定连续但先后顺序一致的n个字符,即可以去掉字符串中的部分字符,但不可改变其前后顺序。 LIS长度的求解方法: 1.$N^2$递推 动态规划一般的思考方式就是考虑将一个大问题分解成若干个小问题来求解,而小问题之间又有共同的求解方法, 或考虑当前状态与哪一个状态有关,并考虑如何转移。 那来思考以第$i$个数字为结尾的LIS是由哪一个转移过来的,显然肯定是由$1...i-1$转移过来的 每次都向前找比它小的和比它大的位置,将第一个比它大的替换掉,这样操作虽然LIS序列的具体数字可能会变,但是很明显LIS长度还是不变的 代码实现 #include <iostream> #include <cstdio> #include <algorithm> #include <cstdlib> #include <cstring> #include <cmath> #define N 101101 using namespace std; int a[N],f[N]; int n,ans=-1; int main() { scanf("%d",&n); for(int i=1; i<=n; i++) { scanf("%d",&a[i]); f[i]=1; } for(int i=1; i<