最近发现了一个刷题网站: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的更多相关文章

  1. Codility NumberSolitaire Solution

    1.题目: A game for one player is played on a board consisting of N consecutive squares, numbered from ...

  2. codility flags solution

    How to solve this HARD issue 1. Problem: A non-empty zero-indexed array A consisting of N integers i ...

  3. GenomicRangeQuery /codility/ preFix sums

    首先上题目: A DNA sequence can be represented as a string consisting of the letters A, C, G and T, which ...

  4. *[codility]Peaks

    https://codility.com/demo/take-sample-test/peaks http://blog.csdn.net/caopengcs/article/details/1749 ...

  5. *[codility]Country network

    https://codility.com/programmers/challenges/fluorum2014 http://www.51nod.com/onlineJudge/questionCod ...

  6. *[codility]AscendingPaths

    https://codility.com/programmers/challenges/magnesium2014 图形上的DP,先按照路径长度排序,然后依次遍历,状态是使用到当前路径为止的情况:每个 ...

  7. *[codility]MaxDoubleSliceSum

    https://codility.com/demo/take-sample-test/max_double_slice_sum 两个最大子段和相拼接,从前和从后都扫一遍.注意其中一段可以为0.还有最后 ...

  8. *[codility]Fish

    https://codility.com/demo/take-sample-test/fish 一开始习惯性使用单调栈,后来发现一个普通栈就可以了. #include <stack> us ...

  9. *[codility]CartesianSequence

    https://codility.com/programmers/challenges/upsilon2012 求笛卡尔树的高度,可以用单调栈来做. 维持一个单调递减的栈,每次进栈的时候记录下它之后有 ...

随机推荐

  1. nginx日志分割及备份

    环境:centos7 nginx1.16.1 一.分割及备份的目的 nginx默认将日志信息写在一个文件中,时间一久日志文件中条目越来越多,文件越来越大,不方便查看,备份的时候也不需要备份重复的信息, ...

  2. 3. 上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? (提示:搜索一下Microsoft TFS、GitHub、Trac、Bugzilla、Rationale,Apple XCode),请用一个实际的源代码管理工具来建立源代码仓库,并签入/签出代码。

    上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? ---------------答题者:徐潇瑞 (1)Microsoft TFS的优缺点: 优点:是对敏捷,msf,c ...

  3. 采坑复盘:logging日志能用封装后的函数来打日志,发现filename一直显示封装logging函数的方法所在的文件名

    问题: logging日志能用封装后的函数来打日志,发现filename一直显示封装logging函数的方法所在的文件名 原因: logging记录的是第一个函数执行所在的文件,那用封装的函数,首先执 ...

  4. 洛谷P4549 裴蜀定理 / Min

    原题链接 题目描述 给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1X1+...AnXn>0,且S的值最小 输入输出格式 输入格式: 第一行给出数字N,代表有N个数 下 ...

  5. phpcms添加https后台分页错误的解决方法

    今天修改一位客户的phpcms网站,他要求添加https,这对ytkah来说是轻车熟路了,但是后台稍微有点问题,点击分页出现错误,将鼠标移到下一页显示的链接是https://www.abc.com/w ...

  6. MySQL | MySQL 数据库系统(一)

    ## 1.什么是 MySQL 数据库? MySQL 数据库是一个关系型数据库管理系统,是服务器领域中受欢迎的开源数据库系统,目前有 Oracle 公司主要负责运营与维护: ## 2.MySQL 数据库 ...

  7. shell脚本如何判断文件大小

    转自:https://blog.csdn.net/lovegengxin/article/details/80762329 1 .ls -lls -l $filename | awk '{print ...

  8. 07-cmake语法-MATCHES

    如果给定的字串或变量值域给定的正则表达式匹配的话,表达式返回真. IF (CMAKE_SYSTEM_NAME MATCHES "Linux") MESSAGE(STATUS &qu ...

  9. 重新学习Spring注解——AOP

    面向切面编程——思想:在一个地方定义通用功能,但是可以通过声明的方式定义这个功能要以何种方式在何处运用,而无须修改受影响的类. 切面:横切关注点可以被模块化为特殊的类. 优点: 1.每个关注点都集中在 ...

  10. 循环递减算法 [a,b,c] 求 ab,ac,bc

    有数组 lineList=[a,b,c] 求所有不同的两两组合 ,结果:ab,ac,bc lineList.forEach((lineA,lineIndex)=>{ ==len){ return ...