146_尺取法 subsequence (POJ No 3061)

 给定长度为n的数列整数a以及整数S,求出总和不小于S的连续子序列的长度的最小值,如果不存在,则输出0。

 提供O(n)的解法:

  对于一个连续的子序列,头为s,尾巴后一位为t,当子序列和>=S时,减去s,s右移动一位,同时更新最短长度(此操作在减去s之前完成);

 当子序列的和小于S时,加一个p然后p右移。

 只要有s,p其中一个越界时,程序就可返回最小长度。

 感觉类似的子序列问题很多都存在线性时间的算法。


 

//
//  146_subsequence.cpp
//  changlle
//
//  Created by user on 1/8/16.
//  Copyright (c) 2016 user. All rights reserved.
//

#include <iostream>
using namespace std;
const int INF=100;
int n=10;
int S=15;
int a[10]={5,1,3,5,10,7,4,9,2,8};


void solve() {
    
    int s=0,t=0;
    int sum=0;
    int len=INF;
    
    while (s<n && t<n) {
        
        if (sum<S)
            sum+=a[t++];
        else {
           
            len=min(len,t-s);
            sum-=a[s++];
   
        }
    }
    
    cout<<len<<endl;

}

int main() {
    
    solve();
    
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
class Decoder(nn.Module): def __init__(self): super(Decoder, self).__init__() self.tgt_emb = nn.Embedding(tgt_vocab_size, d_model) self.pos_emb = PositionalEncoding(d_model) self.layers = nn.ModuleList([DecoderLayer() for _ in range(n_layers)]) def forward(self, dec_inputs, enc_inputs, enc_outputs): ''' dec_inputs: [batch_size, tgt_len] enc_intpus: [batch_size, src_len] enc_outputs: [batsh_size, src_len, d_model] ''' dec_outputs = self.tgt_emb(dec_inputs) # [batch_size, tgt_len, d_model] dec_outputs = self.pos_emb(dec_outputs.transpose(0, 1)).transpose(0, 1).cuda() # [batch_size, tgt_len, d_model] dec_self_attn_pad_mask = get_attn_pad_mask(dec_inputs, dec_inputs).cuda() # [batch_size, tgt_len, tgt_len] dec_self_attn_subsequence_mask = get_attn_subsequence_mask(dec_inputs).cuda() # [batch_size, tgt_len, tgt_len] dec_self_attn_mask = torch.gt((dec_self_attn_pad_mask + dec_self_attn_subsequence_mask), 0).cuda() # [batch_size, tgt_len, tgt_len] dec_enc_attn_mask = get_attn_pad_mask(dec_inputs, enc_inputs) # [batc_size, tgt_len, src_len] dec_self_attns, dec_enc_attns = [], [] for layer in self.layers: # dec_outputs: [batch_size, tgt_len, d_model], dec_self_attn: [batch_size, n_heads, tgt_len, tgt_len], dec_enc_attn: [batch_size, h_heads, tgt_len, src_len] dec_outputs, dec_self_attn, dec_enc_attn = layer(dec_outputs, enc_outputs, dec_self_attn_mask, dec_enc_attn_mask) dec_self_attns.append(dec_self_attn) dec_enc_attns.append(dec_enc_attn) return dec_outputs, dec_self_attns, dec_enc_attns
最新发布
07-16

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值