又一次参赛,除了第一道Easy题和第二道Medium外,剩下的两道在有限时间内,要么没思路,要么思路不对,超时,要么有思路调试出错,还需多加练习!

(这次的第三题,在循环从1开始,直到找到满足地为止,早就预料到会超时,提交之后果然Time out,切换思路,二分查找,但是有限时间内,没有调试正确!这里做一下笔记,以便学习和提高!)

实际代码记录:

 #include <iostream>
#include <vector>
#include <map>
#include <algorithm>
#include <math.h> using namespace std;
void init(vector<vector<int> > &vc,int m,int n)
{
vector<int> level;
level.resize(n);
vc.resize(m,level);
for (int i = ; i < m; i++) {
for (int j = ; j < n; j++) {
cin >> vc[i][j];
}
}
} void printvc(const vector<vector<int> > vc) {
for (int i = ; i < vc.size(); i++)
{
for (int j = ; j < vc[].size(); j++)
{
cout << vc[i][j] << " ";
}
cout << endl;
}
} int subtractProductAndSum(int n) {
if (n < ) return ;
int he = , ji = ;
int temp;
temp = n % ;
while (n) {
he += temp;
ji *= temp;
n = n / ;
temp = n % ;
}
cout << "he is " << he << endl;
cout << "ji is " << ji << endl;
return ji - he;
} vector<vector<int>> groupThePeople(vector<int>& groupSizes) {
vector<vector<int>> res;
vector<int> level;
vector<int> a;
a.resize(groupSizes.size(),);
int count = ;
while(count<groupSizes.size()){
for (int i = ; i < groupSizes.size(); i++)
{
if (a[i] == ) //可用
{
level.push_back(i);
a[i] = ;
count++;
if (level.size() != groupSizes[i])
{
for (int j = i + ; j < groupSizes.size(); j++)
{
if (groupSizes[j] == groupSizes[i] && a[j] == ) {
level.push_back(j);
a[j] = ;
count++;
if (level.size() == groupSizes[i])
break;
}
}
} res.push_back(level);
level.clear();
break;
}
}
} return res;
} bool isornot(vector<int> nums, int number, int threshold);
int smallestDivisor(vector<int>& nums, int threshold) {
//先排序
sort(nums.begin(), nums.end());
//然后二分查找一个满足的值
int low = ;
int high = nums[nums.size() - ];
int res=nums[];
int mid;
while (low <= high) {
mid = (low + high) / ;
if (!isornot(nums, mid, threshold)) //如果mid不符合,说明,答案在右半个区间,更新low
low = mid + ;
else //否则,在左半个区间,更新high
{
high = mid - ;
res = mid;
}
}
return res;
} bool isornot(vector<int> nums,int number, int threshold) {
int sum = ;
for (int i = ; i < nums.size(); i++)
{
sum += ceil(nums[i] / (number*1.0));
//cout<< number<<" sum is "<<sum<<endl;
if (sum > threshold)
return false;
}
return true;
}
int main()
{
// vector<vector<int> > vc;
//init(vc,3,4);
//printvc(vc); /* 第一题
int n;
cin >> n;
cout << subtractProductAndSum(n) << endl;
return 0;
*/ /* 第二题
vector<int> a;
int n;
cin >> n;
a.resize(n);
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
vector<vector<int>> res;
res = groupThePeople(a);
for (int j = 0; j < res.size(); j++)
{
for (int k = 0; k < res[j].size(); k++)
{
cout << res[j][k] << " ";
}
cout << endl;
}
return 0;
*/ /*
vector<int> a;
int n;
cin >> n;
int threshold;
cin >> threshold;
a.resize(n);
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
int res = smallestDivisor(a,threshold);
cout << res << endl; return 0;
*/ return ;
}

第166周赛题目列表:

分析:

  第一题很简单,直接提出数字n的每一位,进行求和和求积,然后返回差即可!

  第二题是说,每个人站在一个确定人数的分组里,那么,加入这个人在3个人的组group里,group.size()就等于每个人身上的号码。

  第三题,就是一开始遍历所有值,但是超时,然后采用二分搜索的方式进行求解:

题目三:

  给你一个整数数组 nums 和一个正整数 threshold  ,你需要选择一个正整数作为除数,然后将数组里每个数都除以它,并对除法结果求和。

  请你找出能够使上述结果小于等于阈值 threshold 的除数中 最小 的那个。

  每个数除以除数后都向上取整,比方说 7/3 = 3 , 10/2 = 5 。

  题目保证一定有解。

示例 1:

  输入:nums = [1,2,5,9], threshold = 6
  输出:5
  解释:如果除数为 1 ,我们可以得到和为 17 (1+2+5+9)。
  如果除数为 4 ,我们可以得到和为 7 (1+1+2+3) 。如果除数为 5 ,和为 5 (1+1+1+2)。

首先写一个函数,判断一个数是否满足数组nums和阈值threshold,

 bool isornot(vector<int> nums,int number, int threshold) {
int sum = ;
for (int i = ; i < nums.size(); i++)
{
sum += ceil(nums[i] / (number*1.0));
//cout<< number<<" sum is "<<sum<<endl;
if (sum > threshold)
return false;
}
return true;
}

然后,数组确定,二分查找这样的最小值即可;

 int smallestDivisor(vector<int>& nums, int threshold) {
//先排序
sort(nums.begin(), nums.end());
//然后二分查找一个满足的值
int low = ;
int high = nums[nums.size() - ];
int res=nums[];
int mid;
while (low <= high) {
mid = (low + high) / ;
if (!isornot(nums, mid, threshold)) //如果mid不符合,说明,答案在右半个区间,更新low
low = mid + ;
else //否则,在左半个区间,更新high
{
high = mid - ;
res = mid;
}
}
return res;
}

题目给定的值,一定满足有解,所以不用考虑无解的情况,因此,low=1,high=max(nums),即当所有的商为1时,最终和最小,一定小于等于阈值;

(很遗憾,当时思路对,但是没有调试出来!)

题目四:

  后续补充~~~

Leetcode 5281. 使结果不超过阈值的最小除数的更多相关文章

  1. leetcode1283 使结果不超过阈值的最小除数

    这道题第一思路是用二分查找 因为使用二分法:所以复杂度为O(n*logk), k介于 left=sum/threshold(向下取整) 和 right=num_max之间:而right<=10^ ...

  2. JVM调优之服务内存超过阈值报警

    今早收到一条短信,具体报警信息如下: [UMP JVM监控内存报警]应用名:发券worker(jdos_couponwkr);KEY[coupon.send.worker.jvm],主机名:[host ...

  3. C#版(击败100.00%的提交) - Leetcode 744. 寻找比目标字母大的最小字母 - 题解

    C#版 - Leetcode 744. 寻找比目标字母大的最小字母 - 题解 744.Find Smallest Letter Greater Than Target 在线提交: https://le ...

  4. Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum)

    Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum) 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. ...

  5. LeetCode 921. 使括号有效的最少添加(Minimum Add to Make Parentheses Valid) 48

    921. 使括号有效的最少添加 921. Minimum Add to Make Parentheses Valid 题目描述 给定一个由 '(' 和 ')' 括号组成的字符串 S,我们需要添加最少的 ...

  6. leetcode 945. 使数组唯一的最小增量

    题目 给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1. 返回使 A 中的每个值都是唯一的最少操作次数. 示例 1: 输入:[1,2,2] 输出:1 解释:经过一次 mov ...

  7. 【leetcode 简单】 第一百零九题 最小移动次数使数组元素相等

    给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [1,2,3] 输出: 3 解释: 只需要3次移动(注意每次移动 ...

  8. Leetcode 363.矩形区域不超过k的最大数值和

    矩形区域不超过k的最大数值和 给定一个非空二维矩阵 matrix 和一个整数 k,找到这个矩阵内部不大于 k 的最大矩形和. 示例: 输入: matrix = [[1,0,1],[0,-2,3]], ...

  9. Java实现 LeetCode 801 使序列递增的最小交换次数 (DP)

    801. 使序列递增的最小交换次数 我们有两个长度相等且不为空的整型数组 A 和 B . 我们可以交换 A[i] 和 B[i] 的元素.注意这两个元素在各自的序列中应该处于相同的位置. 在交换过一些元 ...

随机推荐

  1. 使用Ueditor上传图片到图片服务器(一)

    网站的文章,通过运营平台来发布文章(图文消息),上传图片等.百度Ueditor比较成熟就采用了该技术,另外上传的图片是网站系统以及运营平台系统共享的,所以考虑搭建独立的图片服务器,以后也可以提供给公司 ...

  2. .NetCore打包docker镜像

    1..NetCore 项目打包成Docker 镜像 1.1创建一个.NetCore web项目 项目名为   testmvc  此处用的是.NetCore2.1版本 1.2并且在program里面设置 ...

  3. localdb启动

    前提:vs自带localdb,不用另外装.其次,vs里的的“sql server 对象资源管理器”(在视图里)可以常规管理它.相比之下,SSMS更专业(推荐),按情况选用. 正文: 安装完毕后…… C ...

  4. VirtualBox安装Ubutu出错

    今天打算装个虚拟机玩玩,这次没有选择VM.感觉那东西各种破解有点麻烦而且体积也不小呀,所以,这次我选择了稍微点的的VirtualBox. 一路安装虚拟机没有问题,安装完后新建虚拟机都正常,可在启动虚拟 ...

  5. MySQL——python交互

    与python交互之前我们需要安装一个MySQL的驱动模块Connector,这个驱动模块直接在cmd命令行输入 pip install mysql.connector 安装是否成功可以接着输入 py ...

  6. css实现图片信息展示

    <style> .layui-fluid{padding: 15px;} .img-responsive{display: block;width: 100%;max-width: 100 ...

  7. 英语pyrophane火欧珀pyrophane单词

    pyrophane火欧泊产量稀少,以至于大多数采到宝石的矿主不愿意将它进行切割,即便随形的切割技巧比刻面需要更多的经验也要将其加工成随形,因为这种琢型最能保重.但是与黑欧泊为了保证火彩只能切割成蛋面和 ...

  8. 面试题:android用户注册代码 密码需要加密传输吗

    答案是肯定的,至少比明文好 客户端注册和登录的时候:一个可行的方法是,客户端提交 md5(password) 密码(如上所述,此方法只是简单保护了密码,是可能被查表获取密码的). 注册的时候:服务端数 ...

  9. Test CMake run finished with errors

    Test CMake run finished with errors 记录一个安装 CLion 过程中的错误. CLion的安装和破解教程网上有很多,大家可以自行搜索. 安装了之后在 Setting ...

  10. pg 数据库操作

    一.pg数据库修改操作 Insert into table (key) values (value) on conflict(主键) do update set key=value; 修改的 valu ...