爲了避免斷優化推薦效果,今日頭條天天要存儲和處理海量數據。假設有這樣一種場景:咱們對用戶按照它們的註冊時間前後來標號,對於一類文章,每一個用戶都有不一樣的喜愛值,咱們會想知道某一段時間內註冊的用戶(標號相連的一批用戶)中,有多少用戶對這類文章喜愛值爲k。由於一些特殊的緣由,不會出現一個查詢的用戶區間徹底覆蓋另外一個查詢的用戶區間(不存在L1<=L2<=R2<=R1)。java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import
java.util.*;
public
class
Main {
public
static
void
main(String[] args) {
Scanner sc =
new
Scanner(System.in);
int
userTotal = sc.nextInt();
HashMap<Integer, List<Integer>> like =
new
HashMap<>();
for
(
int
i=
1
; i<=userTotal; i++) {
int
k = sc.nextInt();
if
(like.containsKey(k)) {
List<Integer> list = like.get(k);
list.add(i);
}
else
{
List<Integer> list =
new
ArrayList<>();
list.add(i);
like.put(k, list);
}
}
int
groupTotal = sc.nextInt();
List<Integer> result =
new
ArrayList<>();
for
(
int
i=
0
; i<groupTotal; i++) {
int
low = sc.nextInt();
int
high = sc.nextInt();
int
k = sc.nextInt();
int
total =
0
;
List<Integer> list = like.get(k);
if
(list !=
null
) {
for
(Integer integer : list) {
if
(integer >= low && integer <= high) total++;
}
}
result.add(total);
}
for
(Integer integer:result) {
System.out.println(integer);
}
}
}
|
做爲一個手串藝人,有金主向你訂購了一條包含n個雜色串珠的手串——每一個串珠要麼無色,要麼塗了若干種顏色。爲了使手串的色彩看起來不那麼單調,金主要求,手串上的任意一種顏色(不包含無色),在任意連續的m個串珠裏至多出現一次(注意這裏手串是一個環形)。手串上的顏色一共有c種。如今按順時針序告訴你n個串珠的手串上,每一個串珠用所包含的顏色分別有哪些。請你判斷該手串上有多少種顏色不符合要求。即詢問有多少種顏色在任意連續m個串珠中出現了至少兩次。優化
import java.util.*;
public class Main{
public static void main(String args[]){
Scanner sc= new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
int c=sc.nextInt();
int arr[][]= new int[n][];
int arrCount[]= new int[n];
HashMap<Integer, List<Integer>> ma=new HashMap<>();
for(int i=0;i<n;i++){
int iCount=sc.nextInt();
arrCount[i]=iCount;
if(iCount==0){
;
}else{
for(int j=0;j<iCount;j++){
int x=sc.nextInt();
if(ma.containsKey(x)){
List<Integer> li= ma.get(x);
// List<Integer> list = like.get(k);
li.add(i);
}else{
List<Integer> li=new ArrayList<>();
li.add(i);
ma.put(x,li);
}
}
}
}
int flag=0;
//遍歷map中的值
for (List<Integer> li: ma.values()) {
Collections.sort(li);
int f=li.get(0);
for(int k=1;k<li.size();k++){
if((f+m)>li.get(k)){
flag++;
break;
}
f=li.get(k);
}
//最後一位
}
System.out.println(flag);
}
}spa
字符串S由小寫字母構成,長度爲n。定義一種操做,每次均可以挑選字符串中任意的兩個相鄰字母進行交換。詢問在至多交換m次以後,字符串中最多有多少個連續的位置上的字母相同?code