divide_3
xiao方法
#include<stdio.h>
#include<vector>
#include<iostream> using namespace std; int main()
{
int data[] = {,,};
int flag1 = 0xffffff, flag2 = 0xffffff;
int sum = ;
int res = ;
for(int i = ; i < ; i++)
{
sum += data[i];
if(data[i]%== && data[i]<flag1)
{
flag1 = data[i];
}
else if(data[i]%== && data[i]<flag2)
{
flag2 = data[i];
}
if(sum%== && sum>res)
{
res = sum;
}
else if(sum%== && flag1<0xffffff)
{
res = sum-flag1>res?sum-flag1:res;
}
else if(sum%== && flag2<0xffffff)
{
res = sum-flag2>res?sum-flag2:res;
}
}
cout<<res<<endl;
return ;
} int divide_3(vector<int> input,int length){
vector<int> dp(length);
for(int i = ;i < length;i++){ } }
正负都能解决
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <vector> using namespace std;
int main()
{
int input[] = {-,,,};
vector<int> data(input,input+);
int n = data.size();
vector<vector<int> > dp(n+,vector<int>(,-));
dp[][] = ; for(int i = ;i <= n;i++){
for(int j = ;j < ;j++){
dp[i][j] = max(dp[i][j],dp[i-][j]);
if(dp[i-][j] < )
continue;
int temp = (data[i-] + j) % ;
dp[i][temp] = max(dp[i-][temp], dp[i-][j] + data[i-]);
}
}
cout << dp[n][] << endl;
return ;
}
第一题用DFS是肯定可以做的,但我当时想的是先排个序,然后greedy地取集合里的所有数,看看除3余几
1) 如果余0直接return
2) 如果余1,考虑是丢掉一个最小的除3余1的数,还是丢掉两个最小的除3余2的数.留学论坛-一亩-三分地
3) 如果余2也是类似的
后来跟面试官讨论发现其实不用排序。。打个擂台就能找了(但其实我是想着排序了代码好写一点orz)
优化后时间复杂度是O(n),本来还担心这个方法会不会有点野鸡,但是讲道理效率确实比DFS好得多。。。
follow up: 加入负数的话也是类似的,一开始greedy地取所有正数,然后再考虑是丢掉最小的正数还是加入最大的负数,复杂度一样
divide_3的更多相关文章
- 【java提高】(19)---BigDecimal详解和精度问题
BigDecimal详解和精度问题 一.背景 在实际开发中,对于 不需要任何准确计算精度的属性可以直接使用float或double,但是如果需要精确计算结果,则必须使用BigDecimal,例如价格. ...
随机推荐
- 36.Linux驱动调试-根据oops定位错误代码行
1.当驱动有误时,比如,访问的内存地址是非法的,便会打印一大串的oops出来 1.1以LED驱动为例 将open()函数里的ioremap()屏蔽掉,直接使用物理地址的GPIOF,如下图所示: 1.2 ...
- easyui修改提示窗
1.将文本框type修改成 password 2.easyui中的js
- 2.Observer Pattern(观察者模式)
Observer Pattern(观察者模式)定义: 在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新. 干说定义肯定没有举例理解的透彻.想到Observ ...
- ArrayList源码解读(jdk1.8)
概要 上一章,我们学习了Collection的架构.这一章开始,我们对Collection的具体实现类进行讲解:首先,讲解List,而List中ArrayList又最为常用.因此,本章我们讲解Arra ...
- python协程的简单了解
协程: 协程,又称微线程,纤程.英文名Coroutine. 可以在不同的函数间切换,而且切换的次数和时间都是由用户自己确定的. 协程的几种实现方式: (1)使用生成器yield实现. 如果不了解生成器 ...
- Wampserver配置与本地建站
☆根目录修改问题 /.修改运行根目录 1.修改apache配置,将服务请求定位到新目录下 →左击wampserver,点击Apache打开httpd.conf文件,Ctrl+f搜索documentro ...
- js-ES6学习笔记-Class(2)
1.与函数一样,类也可以使用表达式的形式定义. const MyClass = class Me { getClassName() { return Me.name; } }; 这个类的名字是MyCl ...
- CentOS7下 将django工程部署到Apache2.4上
因为需要写一个网站,考虑到也没写过其他的语言,就直接采用了python,说起python的框架,就是大名鼎鼎的Django啦. 工程所采用的版本是python 2.7,django 是1.8,wind ...
- Difference between nn.softmax & softmax_cross_entropy_with_logits & softmax_cross_entropy_with_logits_v2
nn.softmax 和 softmax_cross_entropy_with_logits 和 softmax_cross_entropy_with_logits_v2 的区别 You have ...
- CountDownTimer 源码分析
倒计时的功能,比如说:发送短信验证码倒计时. public class CountDownTimerActivity extends Activity { private Button mSend; ...