每日OJ题_牛客_HJ63DNA序列_滑动窗口_C++_Java

news/2024/10/18 1:07:48/

目录

牛客_HJ63DNA序列_滑动窗口

题目解析

C++代码

Java代码


牛客_HJ63DNA序列_滑动窗口

孩子们的游戏(圆圈中最后剩下的数)_牛客题霸_牛客网

描述:

        一个 DNA 序列由 A/C/G/T 四个字母的排列组合组成。 G 和 C 的比例(定义为 GC-Ratio )是序列中 G 和 C 两个字母的总的出现次数除以总的字母数目(也就是序列长度)。在基因工程中,这个比例非常重要。因为高的 GC-Ratio 可能是基因的起始点。

        给定一个很长的 DNA 序列,以及限定的子串长度 N ,请帮助研究人员在给出的 DNA 序列中从左往右找出 GC-Ratio 最高且长度为 N 的第一个子串。

DNA序列为 ACGT 的子串有: ACG , CG , CGT 等等,但是没有 AGT , CT 等等


题目解析

        用滑动窗口的思想,首先用一个长度为n的窗口覆盖字符串前n部分子串,统计这里的CG数量,并暂时作为最大值。然后窗口右移,如果左边出去的是CG那么窗口内的CG数量减少一个,如果右边进来的是CG那么窗口内的CG数量增加一个,每次滑动都统计窗口内的CG数量,与临时最大值比较,记录下最大窗口的起始下标。

窗口右端抵达字符串末尾时结束,根据下标用substr函数输出字符串含CG最高的子串。

C++代码

#include <climits>
#include <iostream>
using namespace std;int main()
{string str;int n = 0;cin >> str >> n;int sz = str.size();int cnt = 0; // 统计C和G数量int begin = 0, cur = 0, maxCnt = INT_MIN;while(cur < sz - n){cnt = 0;for(int i = cur; i < cur + n; ++i){if(str[i] == 'C' || str[i] == 'G')++cnt;}if(cnt > maxCnt){begin = cur;maxCnt = cnt;}++cur;}string res(str.begin() + begin, str.begin() + begin + n);cout << res << endl;return 0;
}

Java代码

import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main
{public static void main(String[] args) {Scanner in = new Scanner(System.in);char[] s = in.next().toCharArray();int x = in.nextInt();int begin = 0; // 标记结果的起始位置int maxCount = 0; // 统计以前窗⼝内 C + G 的最⼤值int left = 0, right = 0, n = s.length;int count = 0; // 统计窗⼝内 C + G while(right < n){if(s[right] == 'C' || s[right] == 'G') count++;while(right - left + 1 > x){if(s[left] == 'C' || s[left] == 'G') count--;left++;}if(right - left + 1 == x){if(count > maxCount){begin = left;maxCount = count;}}right++;}for(int i = begin; i < begin + x; i++){System.out.print(s[i]);}}
}

http://www.ppmy.cn/news/1539861.html

相关文章

Java知识大补汤

一、.基础知识 Java 简介&#xff1a;Java 的历史、特点、版本发展。 1. 什么是Java&#xff1f; Java 是一种广泛使用的面向对象编程语言&#xff0c;由 Sun Microsystems 公司在 1995 年 5 月推出&#xff0c;主要由 James Gosling 和他的同事们共同研发。2010 年&#xff0c…

C#——刘铁猛笔记

C#——刘铁猛笔记 类、名称空间&#xff08;简述&#xff09; 类&#xff08;class&#xff09;是构成程序的主体 名称空间&#xff08;namespace&#xff09;以树形结构组织类&#xff08;其他类型&#xff09; 名称空间&#xff1a;名称空间是用来组织和管理类、接口、结构…

在Windows上搭建ChatTTS:从本地部署到远程AI音频生成全攻略

文章目录 前言1. 下载运行ChatTTS模型2. 安装Cpolar工具3. 实现公网访问4. 配置ChatTTS固定公网地址 前言 本篇文章主要介绍如何快速地在Windows系统电脑中本地部署ChatTTS开源文本转语音项目&#xff0c;并且我们还可以结合Cpolar内网穿透工具创建公网地址&#xff0c;随时随…

自动化运维:引领企业数字化转型的新引擎

引言 在当前数字化转型浪潮中&#xff0c;信息技术已成为驱动企业创新、提高竞争力的核心力量。然而&#xff0c;随着 IT 系统的复杂性和规模持续增长&#xff0c;传统的手工运维模式逐渐暴露出效率低下、错误频发和成本高昂等问题。自动化运维&#xff08;Automated Operatio…

【AAOS】Android Automotive 14模拟器源码下载及编译

源码下载 repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r20 repo sync -c --no-tags --no-clone-bundle 源码编译 source build/envsetup.sh lunch sdk_car_x86_64-trunk_staging-eng make -j8 运行效果 emualtor Home All apps …

腾讯云SDK上传相关

什么是客户端视频上传&#xff1f; 客户端视频上传&#xff0c;是指 App 用户将本地视频直接上传到云点播。 视频上传功能 TXUGCPublish 找不到&#xff1f; 视频上传模块已经从 SDK 中独立出来&#xff0c;并开源到 Demo 中&#xff0c;需要用户自己集成短视频上传&#xf…

Oracle RAC IPC Send timeout detected问题分析处理

一、报错信息 今天在进行数据库巡检时&#xff0c;在集群节点1发现了IPC相关报错信息&#xff1a; 2024-10-10T10:22:06.84631708:00 IPC Receiver dump detected. Sender instance 2 Receiver pnum 277 ospid 377527 [oraclezxsszpt-sjkfwq1 (PPA6)], pser 124403 2024-10-1…

使用docker、编写dockerfile、httpd镜像,并启动镜像,创建httpd主页和分页。(2)

1.准备一台机子&#xff0c;准备源&#xff0c;下载docker-ce vi /etc/yum.repo.d/Centos-7.repo 加入以下内容[base] nameCentOS-$releasever - Base - mirrors.aliyun.com failovermethodpriority baseurlhttp://mirrors.aliyun.com/centos/$releasever/os/$basearch/http:/…