又一次参赛,除了第一道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. .net持续集成cake篇之常见文件及路径操作

    系列目录 Cake常见文件和路径操作 在自动化构建任务里,很多操作都是跟文件打交道,比如文件打包,文件压缩,文件归档,文件传输,目录清理等.本节介绍一些cake里常见的文件操作方法 Cake相对路径问 ...

  2. 单片机成长之路(51基础篇)- 024 基于 N76E003 的按键按键状态机

    前端时间要用按键,搞了个状态机(如图): main.c #include <N76E003.H> #include <SFR_Macro.h> //N76E003 SFR寄存器 ...

  3. C#使用post方式提交json数据

    尝试了一天,尝试了各种方法,一下方法最直接方便. //地址 string _url = "https://www.dXXXayup.ink/api/User/Login"; //j ...

  4. 2 java并行基础

    我们认真研究如何才能构建一个正确.健壮并且高效的并行系统. 进程与线程 进程(Process):是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础 ...

  5. 关于.Net Core 前后端分离跨域请求时 ajax并发请求导致部分无法通过验证解决办法。

    项目中有这样一个页面.页面加载的时候会同时并发6个ajax请求去后端请求下拉框. 这样会导致每次都有1~2个“浏览器预请求”不通过. 浏览器为什么会自动发送“预请求”?请看以面连接 https://b ...

  6. python 中问题,包括某些库的问题

    *)TypeError: exceptions must derive from BaseException 原因是raise语句没有写好 raise('value must between 0 an ...

  7. http头字段

    HTTP头字段总结 本节摘自https://www.cnblogs.com/skynet/archive/2010/12/11/1903347.html. 1. Accept:告诉WEB服务器自己接受 ...

  8. bugku秋名山老司机+写博客的第一天

    bugku之秋名山老司机 题目连接:http://123.206.87.240:8002/qiumingshan/ 一点进去是这样的 请在两秒内计算这个式子...怎么可能算的出来 查看源码,无果.. ...

  9. FPM 1.1正式版 Search & List

    前面写的FPM都是自己练习用的.直到自己正式用了一个,才发现一些小问题.feeder class写在一起和分开写有好有坏,这里就不说了. 自己做了个小的查询报表如下: 现在来按SAP官方的做法来重新做 ...

  10. Spring面试专题之aop

    1.背景 aop是编程中非常非常重要的一种思想,在spring项目中用的场景也非常广 2.面试问题 2.1.简单的面试问题 1.什么是aop,aop的作用是什么? 面向切面编程(AOP)提供另外一种角 ...