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,例如价格. ...
随机推荐
- Java基础——iO(三)
一.管道流 演示:PipedInputStream , PipedOutputStream 注意:管道流本身就不建议在一个线程中使用,这是因为向输出流中写的数据,都会存到输入流内部的一个1024字节 ...
- Java基础部分回顾(为自己)
最近,学到集合框架.感觉有些蒙圈儿.知道这一块很重要很重要,不敢疏忽.自学遇到的拦路虎,想着是不是前面的基础知道还没有夯实,对一些概念没有真正的理解到位呢?!所以,停下来.开始找一些视频,做一下回顾. ...
- js 日文全半角转换
客户的需求是,输入半角字符或日语假名,筛选出来的结果显示包含该字符的半角形式和全角形式的所有结果,输入全角也是同样的结果.这里就需要将输入的字符全部转为半角和全角,再去匹配结果. 在网上搜了一圈之后, ...
- 开源框架--NFine.Framework学习(01)
框架底层采用经典DDD架构,UI层采用jQuery+Bootstrap打造而成的一套符合中国式操作习惯的快速开发框架. 前后端使用技术 1.前端技术 JS框架:jquery-2.1.1.Bootstr ...
- HDU3715(二分+2-SAT)
Go Deeper Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- HDU1160(KB12-J DP)
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Mysql实现级联操作(级联更新、级联删除)
一.首先创建两张表stu,sc create table stu( sid int UNSIGNED primary key auto_increment, name ) not null) TYPE ...
- 【读书笔记】iOS-网络-HTTP-URL百分号编码
代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, ty ...
- JSP内置对象——out对象/request对象
在这个科技高速发展的时代,迫使我们的脚步一刻都不能停下. 在这个for循环语句当中,我们可以直接使用jsp内置对象中的out对象来给浏览器打印输出,那么这个out对象就是一个内置对象, 在这里,我们使 ...
- Android 系统中运行jar文件
在android系统中运行jar操作步骤: 1. 打包编译jar包 2. 将jar包导入android设备中 adb push test.jar /data/local/tm ...