LeetCode Contest 166

第一次知道LeetCode 也有比赛。

很久没有打过这种线上的比赛,很激动。

直接写题解吧

第一题

很弱智

class Solution {
public:
int subtractProductAndSum(int n) { int num1=0;
int num2=1; while(n)
{
int x = n%10;
num1+=x;
num2*=x;
n/=10;
} return num2-num1; }
};

第二题

也很简单的,我先排个序。

但是在用c++的快排的时候,被坑了,我一直的习惯是写自定义比较函数,没有写运算符重载,不知道为什么一直RE,浪费了挺多时间

 struct Node
{
int value;
int index;
Node(){}
Node(int value,int index)
{
this->value = value;
this->index = index;
}
bool operator <(const Node &x)const
{
return value<x.value;
}
}; class Solution {
public:
int vis[1005];
Node a[1005];
vector<vector<int>> groupThePeople(vector<int>& groupSizes) {
int len = groupSizes.size(); for(int i=0;i<len;i++)
{
a[i] = Node(groupSizes[i],i);
}
sort(a,a+len);
vector<vector<int>> ans; vector<int> res;
res.push_back(a[0].index);
int num=0;
for(int i=1;i<len;i++)
{ if(a[i].value==a[i-1].value)
{
if(res.size()==a[i].value)
{
ans.push_back(res);
res.clear();
res.push_back(a[i].index);
continue;
}
res.push_back(a[i].index);
}
else
{
ans.push_back(res);
res.clear();
res.push_back(a[i].index);
}
} if(res.size()!=0)
{
ans.push_back(res);
} return ans; } };

第三题

二分,一次过,没有怎么浪费时间

class Solution {
public:
int smallestDivisor(vector<int>& nums, int threshold) { int num=0;
for(int i=0;i<nums.size();i++)
{
num=max(num,nums[i]);
}
int start = 1;
int end = num; while(start<=end)
{
int mid = (start+end)/2; int sum=0;
for(int i=0;i<nums.size();i++)
{
int x;
if(nums[i]%mid==0)
x = nums[i]/mid;
else
x = nums[i]/mid +1; sum+=x;
} if(sum > threshold)
{
start = mid + 1;
continue;
} if(sum <= threshold)
{
end = mid - 1;
continue;
}
} return start; }
};

第四题

看着挺唬人的,我一开始纠结是不是DP,但是一看数据,最多只有3啊,暴力搜索,用位运算保存矩阵的状态,然后注意剪枝就过了。但是因为在第二题上耽误了一些时间,导致比赛结束后,才过了第四题,哎。。

class Solution {
public:
int vis[10005];
int ans[10005];
int map[10][10];
int n,m;
int result;
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int minFlips(vector<vector<int>>& mat) { int len = mat.size();
n=len;
m=mat[0].size();
for(int i=0;i<mat.size();i++)
{ for(int j=mat[i].size()-1;j>=0;j--)
{
map[i][j] = mat[i][j];
} } result = 9999999; int x = compute();
if(x==0)
return 0;
vis[x]=1;
ans[x]=0; for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
fun(i,j,1); map[i][j] ^= 1; for(int k=0;k<4;k++)
{
int xx = i+dir[k][0];
int yy = j+dir[k][1]; if(xx>=0&&xx<n&&yy>=0&&yy<m)
map[xx][yy] ^=1;
}
}
}
if(result == 9999999 )
result =-1; return result; } void fun(int x,int y,int res)
{
map[x][y] ^= 1; for(int i=0;i<4;i++)
{
int xx = x+dir[i][0];
int yy = y+dir[i][1]; if(xx>=0&&xx<n&&yy>=0&&yy<m)
map[xx][yy] ^=1;
} int v = compute();
if(vis[v]==1)
{
if(res>=ans[v])
{
return;
}
else
{
ans[v]=res;
}
}
if(v==0)
{
result=min(result,res);
return;
} vis[v]=1;
ans[v]=res; for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{ fun(i,j,res+1); map[i][j] ^= 1; for(int k=0;k<4;k++)
{
int xx = i+dir[k][0];
int yy = j+dir[k][1]; if(xx>=0&&xx<n&&yy>=0&&yy<m)
map[xx][yy] ^=1;
}
}
}
} int compute()
{
int x=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
x <<= 1;
x |= map[i][j];
}
} return x;
}
};

LeetCode Contest 166的更多相关文章

  1. 【LeetCode】166. Fraction to Recurring Decimal 解题报告(Python)

    [LeetCode]166. Fraction to Recurring Decimal 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingz ...

  2. leetcode contest 20

    Q1: 520. Detect Capital Given a word, you need to judge whether the usage of capitals in it is right ...

  3. LeetCode No.166,167,168

    No.166 FractionToDecimal 分数到小数 题目 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数 ...

  4. 【LeetCode】166. Fraction to Recurring Decimal

    Fraction to Recurring Decimal Given two integers representing the numerator and denominator of a fra ...

  5. LeetCode(166) Fraction to Recurring Decimal

    题目 Given two integers representing the numerator and denominator of a fraction, return the fraction ...

  6. Atcoder Beginner Contest 166

    VP赛况如下: 前言:感觉这一场题目难度还是比较贴近新生的,我一个codeforces小蓝名一小时居然AK了,F题数据有点水(?)暴力dfs居然都能过... A:A?C 题意:给你字符串,如果字符串是 ...

  7. 230th Weekly Leetcode Contest

    题目二 题目描述 5690. 最接近目标价格的甜点成本  难度:中等-中等 题解 解法一:三进制状态压缩 考虑到baseCosts.toppingCosts的长度最多都为10,每一种辅料都有加0.1. ...

  8. 【刷题-LeetCode】166 Fraction to Recurring Decimal

    Fraction to Recurring Decimal Given two integers representing the numerator and denominator of a fra ...

  9. leetcode bugfree note

    463. Island Perimeterhttps://leetcode.com/problems/island-perimeter/就是逐一遍历所有的cell,用分离的cell总的的边数减去重叠的 ...

随机推荐

  1. 动态SQL屏幕条件选择(里面还有赋值的新语法)

    有时候屏幕条件中使用PARAMETERS时候,如果你为空的话,会查不出数据,但是可能你的想法是不想限制而已,但是系统默认理解为了空值,这个时候,如果取判断一下条件是不是空,在SQL里决定写不写的话,会 ...

  2. 最近的项目系之3——core3.0整合Senparc

    1.前言 既然是.net下微信开发,自然少不了Senparc,可以说这个框架的存在, 至少节省了微信相关工作量的80%.事实上,项目开始前,还纠结了下是Java还是core,之所以最终选择core,除 ...

  3. 学习Python前言

    先介绍下自己: 我是小芒果,在一家互联网公司上班 目前担任的是测试工程师职 自工作开始至今,已经3年之载 一路过来倒也轻松 期间学过几次python没一次能坚持下来 随着行业的饱和 测试技术的要求 以 ...

  4. 【OOM】解决思路

    一.什么是OOM? OOM就是outOfMemory,内存溢出!可能是每一个java人员都能遇到的问题!原因是堆中有太多的存活对象(GC-ROOT可达),占满了堆空间. 二.怎么解决? 1.拿到内存溢 ...

  5. cmdb全总结

    1.什么是cmdb ,做什么的? 配置管理数据库 ,就是存储基础设施的信息配置使用的 简单说就是CMDB这个系统可以自动发现网络上的IT设备 ,并自动存储相关信息 ,像一台服务器有型号 厂商 系统 c ...

  6. Linux下设置root密码

    如下面的代码所示: sudo passwd [sudo] geeksong 的密码: 输入新的 UNIX 密码: 重新输入新的 UNIX 密码: passwd:已成功更新密码 更性的unix密码就是r ...

  7. linux用户管理章节笔记

    1 更改有效用户组 :newgrp zeng 把当前用户的有效用户组更改为zeng.事后可以使用groups命令查看. 2 在使用useradd命令增加用户时,在/etc/passwd的值一般会参考 ...

  8. scala 语法速查

    摘自官网 variables   var x = 5 Good x = 6 Variable. val x = 5 Bad x = 6 Constant. var x: Double = 5 Expl ...

  9. luoguP3017Brownie Slicing

    https://www.luogu.org/problem/P3017 题意 给你一个蛋糕,R行C列 ,每个点有巧克力碎屑(如下) 1 2 2 1 3 1 1 1 2 0 1 3 1 1 1 1 1 ...

  10. 第50 课C++对象模型分析——成员函数(上)

    类中的成员函数位于代码段中调用成员函数时对象地址作为参数隐式传递成员函数通过对象地址访问成员变量C++语法规则隐藏了对象地址的传递过程 #include<iostream> #includ ...