max函数

栈、队列、双端队列、优先队列

a 夏天 提交于 2020-03-01 13:43:58
栈、队列、双端队列、优先队列 栈和队列的基本实现和特性 栈 1.Stack:先入后出;添加、删除皆为O(1) 2.查询为 O(n) 时间复杂度 方法 复杂度 Access O(n) Search O(n) Insertion O(1) Deletion O(1) 成员函数 元素访问 top 访问栈顶元素 容量 empty 检查底层的容器是否为空 size 返回容纳的元素数 修改器 push 向栈顶插入元素 emplace 于顶原位构造元素 pop 删除栈顶元素 swap 交换内容 示例代码-Stack Stack<Integer> stack = new Stack<>(); stack.push(1); stack.push(2); stack.push(3); stack.push(4); System.out.println(stack); System.out.println(stack.search(4)); stack.pop(); stack.pop(); Integer topElement = stack.peek(); System.out.println(topElement); System.out.println(" 3的位置 " + stack.search(3)); 队列 1.Queue:先入先出;添加、删除皆为O(1) 2.查询为 O(n)

Golang实现高性能凑单工具:给定<金额列表>计算<目标金额>所有组合

南笙酒味 提交于 2020-02-29 01:01:55
目录 一、需求 二、实现思路 三、最终方案:动态规划 四、使用方式 1.直接调用代码(适合用来开发自己的软件) 2.命令行模式(适合不会编程的人使用) 五、总结 一、需求 公司有一个比较坑爹的报销方案,需要根据一堆碎的发票中,凑出一个目标金额,要求误差在1块钱以内 缺点:每次人肉去对比,浪费大量的时间。 大概是这样的,新建一个excel表格,将所有的金额录入,然后自己勾选发票,直到目标金额出现,如下图 二、实现思路 最差方案:全组和 使用全组合,搜索所有组合方案,遍历满足的结果输出,时间复杂度为O(n!),原先调用了python的排列组合函数实现,结果卡得不行,有时候能把程序跑挂了 中等方案:回溯暴力破解 利用回溯输出,存在重复递归,时间复杂度为O(2^n),一般来说已经满足正常需求,但是如果n很大,还是影响性能 最优方案:动态规划 时间复杂度为O(n*w),为最快方案,提升气质指数,5颗星! 三、最终方案:动态规划 最终用动态规划思想实现,空间换时间,200个碎票匹配1万的金额秒出结果,大概使用800M内存, 代码已经贴到github: chenqionghe/amount-calculator 核心代码如下 package main import ( "fmt" "github.com/shopspring/decimal" "strconv" "time" ) type

求最大值

纵然是瞬间 提交于 2020-02-25 16:06:27
编写函数max(int a, int b, int c),求3个整数的最大值,并通过main函数进行调用。 # include <iostream> using namespace std ; int main ( ) { int a , b , c ; cin >> a >> b >> c ; cout << max ( a , b , c ) ; return 0 ; } int max ( int a , int b , int c ) { int max = 0 ; max = a ; if ( max < b ) { max = b ; } if ( max < c ) { max = c ; } return max ; } 来源: CSDN 作者: 明志留 链接: https://blog.csdn.net/huangziguang/article/details/104494866

[动态规划] leetcode 123 Best Time to Buy and Sell Stock III

☆樱花仙子☆ 提交于 2020-02-21 11:13:43
problem: https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iii/ 题目的意思已知每天股票的价格,最多进行两次交易(买卖操作),能够赚取的最大利润。(每天最多只能进行一次操作:买或卖;且必须卖出手头持有股票后,才能进行下一次购买) 思路很简单,我们可以把区间划分为两部分,分别求两部分的最大利润值,然后叠加。比较所有划分,求得最大值。 当然,由于我们也可以只进行一次交易,所以还需要考虑不划分时的最大利润值。 基于以上思路,可以很快写出如下O(n^2) 复杂度的算法: class Solution { public: int maxProfit(vector<int>& prices) { int n = prices.size(); int profit = max(0, getMax(prices, 0, n)); for(int i = 2; i < n - 1;i++) { profit = max(profit, getMax(prices, 0, i) + getMax(prices, i, n)); } return profit; } int getMax(vector<int>& prices, int i, int j) { int maxnum = INT_MIN; int

C++与C的主要差异

北城余情 提交于 2020-02-19 16:02:38
文章目录 符号常量 标准输入输出流 内联函数 带默认形参值的函数 函数重载 符号常量 符号常量,也称const常量,是用来表示一个常量的标识符。定义const常量的语法 格式为: const <类型> <常量名>=<表达式>;例如: • const double PI=3.1415926; • 提示: 在程序中使用符号常量可以提高程序的可读性和可维护性。例如将数值计算 中经常使用的一些参数定义为符号常量,当需要改变参数数值时,只需要更改符号 常量的定义语句就行了。 • 在编程时,符号常量同变量一样,都必须“先定义,后使用”。 例如: # include <iostream> using namespace std ; const double PI = 3.14 ; // 可根据需要随时调整PI的精度 int main ( ) { double r ; //定义表示圆的半径的变量 cout << "请输入圆的半径:" ; cin >> r ; //输入圆的半径 cout << "圆的周长是:" << 2 * PI * r << endl ; cout << "圆的面积是:" << PI * r * r << endl ; return 0 ; } 标准输入输出流 在C语言中,输入输出通过调用scanf()和printf()来实现,而C++中则是使用类 对象cin和cout来实现。

第九次作业

[亡魂溺海] 提交于 2020-02-17 18:36:08
1.题目: 定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数, 代码: #include <stdio.h> #define N 100 void readScore(int score[],int n);//录入数组 void printscore(int score[],int n);//输出数组 double average(int score[],int n);//平均分 int findmax(int score[],int n);//最高分 int findmin(int score[],int n);//最低分 void findmaxlndex(int score[],int n,int Max);//求最高分的下标 void findminlndex(int score[],int n,int Min);//求最低分的下标 void search(int score[],int n,int x);//查询成绩 void bubblesort(int score[],int n);//排序 int main() { int score

2018-2019 ACM-ICPC, Asia Seoul Regional Contest

£可爱£侵袭症+ 提交于 2020-02-12 20:28:44
ProblemA Circuits Solved. 题意: 有$n$个矩形,可以放两条平行与$x$轴的线,求怎么放置两条无线长的平行于$x$轴的线,使得他们与矩形相交个数最多 如果一个矩形同时与两条线相交,只算一次。 思路: 离散化后枚举一根线,另一根线用线段树维护,扫描线思想 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 #define N 400010 5 int n; 6 int b[N]; 7 int x[N], y[N]; 8 vector <int> in[N], out[N]; 9 int ans[N]; 10 11 namespace SEG 12 { 13 struct node 14 { 15 int Max, lazy; 16 node () {} 17 node (int Max, int lazy) : Max(Max), lazy(lazy) {} 18 void init() { Max = lazy = 0; } 19 void add(int x) 20 { 21 Max += x; 22 lazy += x; 23 } 24 node operator + (const node &other) const 25 { 26 node res; res.init(); 27 res

损失函数Loss Function

可紊 提交于 2020-02-12 04:34:37
简介 损失函数(loss function)或 代价函数 (cost function)是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数。在应用中,损失函数通常作为学习准则与优化问题相联系,即通过最小化损失函数求解和评估模型。例如在统计学和 机器学习中被用于模型的 参数估计 (parameteric estimation) [1] ,在宏观经济学中被用于 风险管理 (risk mangement)和决策 [2] ,在控制理论中被应用于 最优控制理论 (optimal control theory) [3] 。(来自百度百科) 机器通过损失函数进行学习,这是一种评估特定算法对给定数据建模程度的方法。如果预测值与实际结果偏离较远,损失函数会得到一个非常大的值。在一些优化函数的辅助下,损失函数逐渐学会减少预测值的误差。 机器学习的三要素就是:表示,评估和优化。正如我们在《非参数模型》中提到的: 机器学习分为表示、评估和优化。表示指的是将样本空间映射到一个合适的特征空间,一般地,我们更青睐于这样的表示是低维度的,是更加稀疏交互的,同时也希望是相互独立的。而评估指的是模型在数据上表现的量化形式,我们选取合适的函数来表示什么样子的模型是好的,性能度量就是评估。在前两步都完成了以后,最后要做的就是优化,就是对评估函数进行求解,找出最合适的解

JavaScript重新学习、捡漏 (4)

╄→尐↘猪︶ㄣ 提交于 2020-02-08 17:32:45
JavaScript重新学习、捡漏 (4) Math 对象 1. round()方法坑点: 四舍五入函数,遇到 .5 则不同,遇到 .5 则是往大了取 2. abs()方法解析: 对于数字而言没有什么坑点,就是针对 字符串型的数字 有一个 隐式转换 ,也可以进行绝对值操作,但是对于 字符串 就没有办法了,返回一个 NaN 。 3. random()返回一个[0,1]之间的浮点数,封装案例: //返回两个数之间(包含两个数)的随机数 function getMax ( min . max ) { min = Math . ceil ( min ) ; max = Math . ceil ( max ) ; return Math . floor ( Math . random ( ) * ( max - min + 1 ) + min ) ; } //返回两个数之间(不包含两个数)的随机数 function getMax ( min . max ) { min = Math . ceil ( min ) ; max = Math . ceil ( max ) ; return Math . floor ( Math . random ( ) * ( max - min ) + min ) ; } 来源: CSDN 作者: 阿胡胡 链接: https://blog.csdn.net

2020 CCPC Wannafly Winter Camp Day7

余生长醉 提交于 2020-02-08 04:28:09
K 发现即是求 k ∗ ( k + 1 ) / 2 > = m a x ( 0 , b 1 − k ∗ a 1 ) + m a x ( 0 , b 2 − k ∗ a 2 ) k*(k+1)/2>=max(0, b1-k*a1)+max(0,b2-k*a2) k ∗ ( k + 1 ) / 2 > = m a x ( 0 , b 1 − k ∗ a 1 ) + m a x ( 0 , b 2 − k ∗ a 2 ) 单调函数,求出最小满足的k二分即可 #include <bits/stdc++.h> using namespace std; const int maxn = 1e3 + 5; typedef long long ll; ll a1, a2, b1, b2; int main() { scanf("%lld%lld", &a1, &a2); int n; scanf("%d", &n); ll ans = 1e8; for (int i = 0; i < n; ++i) { scanf("%lld%lld", &b1, &b2); ll l = 1, r = 1e8; while (l < r) { ll mid = (l + r) / 2; if (mid * (mid + 1) >= 2 * (max(b1 - mid * a1, 0ll) + max(b2 -