Skip to content

Commit f074c7a

Browse files
author
baochau.dinh
committed
js-concepts: couting, range queries with two dimensional array
1 parent ab2111d commit f074c7a

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed

Counting/index.js

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/**
2+
* Problem 1: Given an array A has n elements.
3+
* A (L, r, k) query is a query counts # elements equal to k from L to r
4+
*/
5+
6+
function main(A) {
7+
if (A.length === 0) return;
8+
9+
function solution(L, R, K) {
10+
let count = 0;
11+
for (let i = L; i <= R; i++) {
12+
if (A[i] === K) count++;
13+
}
14+
15+
return count;
16+
}
17+
18+
return solution(3, 9, 3); // test
19+
}
20+
21+
/**
22+
* Problem 2: Given an array A has n elements.
23+
* There are #Q queries (L_i, R_i, k) 1 <= i <= Q
24+
*/
25+
26+
function main2(A) {
27+
if (A.length === 0) return;
28+
29+
function solution(Q = [], K) {
30+
let count = new Array(A.length).fill(0); // mảng cộng dồn, count[i] minh họa số phần tử bằng K trong đoạn từ 0 đến i
31+
if (A[0] === K) count[0] = 1;
32+
else count[0] = 0;
33+
for (let i = 1; i < A.length; i++) {
34+
if (A[i] === K) count[i] = count[i - 1] + 1;
35+
else count[i] = count[i - 1];
36+
}
37+
38+
for (let i = 0; i < Q.length; i++) {
39+
let L = Q[i][0], R = Q[i][1];
40+
console.log(count[R] - count[L]);
41+
}
42+
43+
return;
44+
}
45+
46+
return solution([[0, 3], [1, 2], [3, 9]], 2);
47+
}
48+
49+
/**
50+
* Given an array A has n elements
51+
* There are #Q queries like (L_i, R_i, K_i) 1<= i <= Q
52+
* Count
53+
*/
54+
55+
function main3(A) {
56+
if (A.length === 0) return;
57+
58+
function solution(Q = []) {
59+
let count = new Array(A.length).fill(0).map(x => new Array(100)); // count[i][K] đếm số lần xuất hiện của K trong đoạn từ 0 đến i
60+
for (let i = 0; i < A.length; i++) {
61+
for (let j = 0; j <= 2; j++) {
62+
if (A[i] === j) {
63+
count[i][j] = (i >= 1) ? count[i - 1][j] + 1 : 1
64+
} else {
65+
count[i][j] = (i >= 1) ? count[i - 1][j] : 0
66+
}
67+
}
68+
}
69+
70+
for (let i = 0; i < Q.length; i++) {
71+
let L = Q[i][0], R = Q[i][1], K = Q[i][2];
72+
console.log(count[R][K] - (L >= 1 ? count[L - 1][K] : 0));
73+
}
74+
75+
return;
76+
}
77+
78+
return solution([[0, 2, 2], [1, 2, 1], [0, 2, 1]]);
79+
}
80+
81+
console.log(main3([1, 1, 1]));
82+
83+
// function rangeQueries (A = []) {
84+
// if (A.length === 0) return;
85+
// let count = new Array(3).fill(0).map(x => new Array(3));
86+
87+
// for (let i = 0; i < A.length; i++) {
88+
// for (let j = 0; j < 3; j++) {
89+
// if (j === A[i]) {
90+
// count[i][j] = (i >= 1) ? count[i - 1][j] + 1 : 1;
91+
// } else {
92+
// count[i][j] = (i >= 1) ? count[i - 1][j] : 0;
93+
// }
94+
// }
95+
// }
96+
// return;
97+
// }
98+
99+
// console.log(rangeQueries([2, 1, 1]));

0 commit comments

Comments
 (0)