Codility MinMaxDivision
最近发现了一个刷题网站:https://app.codility.com/programmers/lessons
这个网站做题目时候的界面让我惊艳到了
首先这是题目界面:

然后点击start, 出来的是这样一个界面

有计时功能,还有自己编写测试样例功能,还有很多其他功能。给人营造一种完全融入到刷题状态的感觉。
点击提交之后的结果如下:


还可以分析你程序的时间效率。满分是100%
从体验来说,比LeetCode 强很多了。但是他的题目好像很少。
接下来说这道题目。从一个数组中划分k个块,要求k个块中最大数组和最小,我一开始想用动态规划,结果发现,数据范围太大,不是动态规划的范畴。
一看题目的类别是二分。根据之前刷题的经验,求最大中的最小,或者最小中的最大,要么是二分,要么是动态规划。
二分的话,得找到用来二分的对象。这道题目应该对结果进行二分。就是k个块中最大数组和的最小值。
从0 到 sum 进行二分,那么二分中的判断条件就是该数组是否可以划分小于等于k个块,并且每个块的和都小于等于mid
如果符合条件,说明mid的值是过大的,还可以再小一点,end=mid-1;
如果不符合条件,说明mid的值是过小的,start=mid+1;
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <vector>
int n,m,k;
using namespace std;
bool isTrue(vector<int> &A,int sum,int k)
{
int s=0;
int p=0;
for(int i=0;i<A.size();i++)
{
if(s>sum)
{
p++;
i--;
s=0;
}
s+=A[i];
}
if(s<=sum)
p++;
else
p+=2;
if(p<=k)
return true;
return false;
}
int solution(int K, int M, vector<int> &A) {
int end=0;
int start = 0;
for(int i=0;i<A.size();i++)
{
end += A[i];
start = max(start,A[i]);
}
while(start<end)
{
int mid = (start+end)/2;
if(isTrue(A,mid,K))
{
end=mid;
}
else
{
start=mid+1;
}
}
return start;
// write your code in C++14 (g++ 6.2.0)
}
Codility MinMaxDivision的更多相关文章
- Codility NumberSolitaire Solution
1.题目: A game for one player is played on a board consisting of N consecutive squares, numbered from ...
- codility flags solution
How to solve this HARD issue 1. Problem: A non-empty zero-indexed array A consisting of N integers i ...
- GenomicRangeQuery /codility/ preFix sums
首先上题目: A DNA sequence can be represented as a string consisting of the letters A, C, G and T, which ...
- *[codility]Peaks
https://codility.com/demo/take-sample-test/peaks http://blog.csdn.net/caopengcs/article/details/1749 ...
- *[codility]Country network
https://codility.com/programmers/challenges/fluorum2014 http://www.51nod.com/onlineJudge/questionCod ...
- *[codility]AscendingPaths
https://codility.com/programmers/challenges/magnesium2014 图形上的DP,先按照路径长度排序,然后依次遍历,状态是使用到当前路径为止的情况:每个 ...
- *[codility]MaxDoubleSliceSum
https://codility.com/demo/take-sample-test/max_double_slice_sum 两个最大子段和相拼接,从前和从后都扫一遍.注意其中一段可以为0.还有最后 ...
- *[codility]Fish
https://codility.com/demo/take-sample-test/fish 一开始习惯性使用单调栈,后来发现一个普通栈就可以了. #include <stack> us ...
- *[codility]CartesianSequence
https://codility.com/programmers/challenges/upsilon2012 求笛卡尔树的高度,可以用单调栈来做. 维持一个单调递减的栈,每次进栈的时候记录下它之后有 ...
随机推荐
- vscode vue 去掉语法提示
在vscode中,点击file->preferences->settings, 然后输入vetur, 滚到最下面,那个勾去掉,然后关闭,重启vscode就可以了
- 深入理解MDL元数据锁
前言: 当你在MySQL中执行一条SQL时,语句并没有在你预期的时间内执行完成,这时候我们通常会登陆到MySQL数据库上查看是不是出了什么问题,通常会使用的一个命令就是 show processli ...
- Linux的web服务的介绍
web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的.全球性的.动态交互的.跨平台的分布式图形信息系统.是建立在Internet上的一种网络服务,为浏览者在 ...
- springboot中配置urlrewrite实现url伪静态强化网站seo
关于urlrewrite urlrewrite使用强大的自定义规则来使用用户更容易记住.搜索引擎更容易找到的URL(对于seo比较重要).通过使用规则模板.重写映射,Web管理员可以轻松地设置规则,根 ...
- frame标签和frameset
框架: 属性 值 描述 frameborder 0 1 规定是否显示框架周围的边框. longdesc URL 规定一个包含有关框架内容的长描述的页面. marginheight pixels 定义框 ...
- T4模板 简单使用
原文:https://www.cnblogs.com/sanduo8899/p/3964563.html <#@ template debug="false" hostspe ...
- Sublime Text3 设置
主题:Spacegrey.sublime-theme 配色方案:Mariana 自动保存 参考:https://www.cnblogs.com/mzzz/p/6178341.html "sa ...
- 【louguP2234】[HNOI2002]营业额统计(链表)
题目链接 离线用链表维护,先按权值排序,建立链表,记录每一天在链表的位置,然后按天数从大到小查询,查询完删除 #include<algorithm> #include<iostrea ...
- 将float数字按照一定格式写入到文件中
/* float.c */ #include<stdio.h> #include<string.h> int main() { FILE *fp = fopen("D ...
- Spring Boot 知识笔记(Filter过滤器)
Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 htm ...