统计单词数
统计单词数
统计单词数概述统计单词数是一种非常常见的算法题,在算法比赛之中也经常出现,作为一名曾经获得过蓝桥杯国家二等奖的,稍微懂一点点算法的博主(本质还是一名Java博主),我采取两种方式进行讲解。题目:比如统计如下这段字符串中的每个单词数量:I am LIhua I am zhangsan.HashMap代码语言:javascript代码运行次数:0运行复制import java.util.*
统计单词数
概述
统计单词数是一种非常常见的算法题,在算法比赛之中也经常出现,作为一名曾经获得过蓝桥杯国家二等奖的,稍微懂一点点算法的博主(本质还是一名Java博主),我采取两种方式进行讲解。
题目:比如统计如下这段字符串中的每个单词数量:I am LIhua I am zhangsan
.
HashMap
代码语言:javascript代码运行次数:0运行复制import java.util.*;
class Main
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
String str[] = ().split(" ");
HashMap<String,Integer> map = new HashMap<String, Integer>();
for (String i : str)
{
map.put(i, map.getOrDefault(i, 0) + 1);
}
for (String i : map.keySet())
{
println(i + " " + map.get(i));
}
}
}
运行结果
给定一个大小为 n≤106 的数组。
有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。
你只能在窗口中看到 k 个数字。
每次滑动窗口向右移动一个位置。
以下是一个例子:
该数组为 [1 -1 - 5 6 7],k 为 。
窗口位置 最小值 最大值 [1 -1] - 5 6 7 -1 1 [ -1 -] 5 6 7 - 1 [-1 - 5] 6 7 - 5 1 -1 [- 5 ] 6 7 - 5 1 -1 - [5 6] 7 6 1 -1 - 5 [ 6 7] 7 你的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。
输入格式 输入包含两行。
第一行包含两个整数 n 和 k,分别代表数组长度和滑动窗口的长度。
第二行有 n 个整数,代表数组的具体数值。
同行数据之间用空格隔开。
输出格式 输出包含两个。
第一行输出,从左至右,每个位置滑动窗口中的最小值。
第二行输出,从左至右,每个位置滑动窗口中的最大值。
输入样例: 8 1 -1 - 5 6 7 输出样例: -1 - - - 5 5 6 7
提交代码
C++
代码语言:javascript代码运行次数:0运行复制#include<iostream>
using namespace std;
ct int = 1000010;
int a[], q[], hh, tt = -1;
int main()
{
int n, k;
cin >> n >> k;
for (int i = 0; i < n; ++ i) // 这个题要注意的是 q队列里面存放的是位置
{
scanf ("%d", &a[i]); // 先求的是最小值
if (i - k + 1 > q[hh]) ++hh; // 如果最小值的位置已经滑出窗口了 然后就
// ++ hh代表这个数已经没了
while (hh <= tt && a[i] <= a[q[tt]]) -- tt; // 先确保队列里面有数字
// 然后如果新来的数字要小于 队列里面的最小值
// 那么--tt 就代表当前队列的最小值去掉
q[++ tt] = i; // 把新来的数字放到队列中
if (i + 1 >= k) printf ("%d ", a[q[hh]]); // 当前队列的长度已经满足k了
// 就可以把对首的元素输出出来
}
puts("");
int hh = 0, tt = -1;
for (int i = 0; i < n; ++ i)
{
if (i - k + 1 > q[hh]) ++ hh;
while (hh <= tt && a[i] >= a[q[tt]]) -- tt;
q[++ tt] = i;
if (i + 1 >= k) printf("%d ", a[q[hh]]);
}
return 0;
}
Java
代码语言:javascript代码运行次数:0运行复制import java.io.*;
public class Main
{
final static int = 1000010;
static int [] a = new int [];
static int [] q = new int [];
static int hh = 0, tt = -1;
public static void main(String[] args) throws IOException
{
int n, k;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter());
String [] str = reader.readLine().split(" ");
n = Integer.parseInt(str[0]);
k = Integer.parseInt(str[1]);
str = reader.readLine().split(" ");
for (int i = 0; i < n; ++ i) a[i] = Integer.parseInt(str[i]);
// for (int i = 0; i < n; ++ i)
// {
// if (hh <= tt && i - k + 1 > q[hh]) ++ hh;
// while (hh <= tt && a[i] <= a[q[hh]]) -- tt;
// q[++ tt] = i;
// if (i + 1 >= k) out.write(a[q[hh]]+" ");
// }
for(int i = 0; i < n; i ++)
{
if(hh <= tt && i - q[hh] + 1 > k) hh++;//判断队头是否已经滑出窗口
while(hh <= tt && a[q[tt]] >= a[i]) tt--;//出队
q[++tt] = i;//入队
if(i >= k - 1) out.write(a[q[hh]]+" ");
}
out.write("\n");
hh = 0;
tt = -1;
// for (int i = 0; i < n; ++ i)
// {
// if (hh <= tt && i - k + 1 > q[hh]) ++ hh;
// while (hh <= tt && a[i] >= a[q[hh]]) -- tt;
// q[++ tt] = i;
// if (i + 1 >= k) out.write(a[q[hh]]+" ");
// }
for(int i = 0; i < n; i ++)
{
if(hh <= tt && i - q[hh] + 1 > k) hh++;//判断队头是否已经滑出窗口
while(hh <= tt && a[q[tt]] <= a[i]) tt--;//出队
q[++tt] = i;//入队
if(i >= k - 1) out.write(a[q[hh]]+" ");
}
out.flush();
();
}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:202-11-26,如有侵权请联系 cloudcommunity@tencent 删除队列数组算法统计int #感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-20 00:22:03
推荐阅读
留言与评论(共有 5 条评论) |
本站网友 新华里 | 23分钟前 发表 |
原始发表:202-11-26 | |
本站网友 北京小吃攻略 | 23分钟前 发表 |
q[] | |
本站网友 月经期吃什么好 | 14分钟前 发表 |
k; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter out = new BufferedWriter(new OutputStreamWriter()); String [] str = reader.readLine().split(" "); n = Integer.parseInt(str[0]); k = Integer.parseInt(str[1]); str = reader.readLine().split(" "); for (int i = 0; i < n; ++ i) a[i] = Integer.parseInt(str[i]); // for (int i = 0; i < n; ++ i) // { // if (hh <= tt && i - k + 1 > q[hh]) ++ hh; // while (hh <= tt && a[i] <= a[q[hh]]) -- tt; // q[++ tt] = i; // if (i + 1 >= k) out.write(a[q[hh]]+" "); // } for(int i = 0; i < n; i ++) { if(hh <= tt && i - q[hh] + 1 > k) hh++;//判断队头是否已经滑出窗口 while(hh <= tt && a[q[tt]] >= a[i]) tt--;//出队 q[++tt] = i;//入队 if(i >= k - 1) out.write(a[q[hh]]+" "); } out.write("\n"); hh = 0; tt = -1; // for (int i = 0; i < n; ++ i) // { // if (hh <= tt && i - k + 1 > q[hh]) ++ hh; // while (hh <= tt && a[i] >= a[q[hh]]) -- tt; // q[++ tt] = i; // if (i + 1 >= k) out.write(a[q[hh]]+" "); // } for(int i = 0; i < n; i ++) { if(hh <= tt && i - q[hh] + 1 > k) hh++;//判断队头是否已经滑出窗口 while(hh <= tt && a[q[tt]] <= a[i]) tt--;//出队 q[++tt] = i;//入队 if(i >= k - 1) out.write(a[q[hh]]+" "); } out.flush(); (); } }本文参与 腾讯云自媒体同步曝光计划 | |
本站网友 洋甘菊精油的作用 | 8分钟前 发表 |
第二行输出 |