Skip to content

Commit de21e8d

Browse files
authored
feat: add js solution to lc problem: No. 1334 (#3334)
1 parent aa4e2e0 commit de21e8d

File tree

6 files changed

+540
-0
lines changed

6 files changed

+540
-0
lines changed

solution/1300-1399/1334.Find the City With the Smallest Number of Neighbors at a Threshold Distance/README.md

+190
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,50 @@ function findTheCity(n: number, edges: number[][], distanceThreshold: number): n
329329
}
330330
```
331331

332+
#### JavaScript
333+
334+
```js
335+
function findTheCity(n, edges, distanceThreshold) {
336+
const g = Array.from({ length: n }, () => Array(n).fill(Infinity));
337+
const dist = Array(n).fill(Infinity);
338+
const vis = Array(n).fill(false);
339+
for (const [f, t, w] of edges) {
340+
g[f][t] = g[t][f] = w;
341+
}
342+
343+
const dijkstra = u => {
344+
dist.fill(Infinity);
345+
vis.fill(false);
346+
dist[u] = 0;
347+
for (let i = 0; i < n; ++i) {
348+
let k = -1;
349+
for (let j = 0; j < n; ++j) {
350+
if (!vis[j] && (k === -1 || dist[j] < dist[k])) {
351+
k = j;
352+
}
353+
}
354+
vis[k] = true;
355+
for (let j = 0; j < n; ++j) {
356+
dist[j] = Math.min(dist[j], dist[k] + g[k][j]);
357+
}
358+
}
359+
return dist.filter(d => d <= distanceThreshold).length;
360+
};
361+
362+
let ans = n;
363+
let cnt = Infinity;
364+
for (let i = n - 1; i >= 0; --i) {
365+
const t = dijkstra(i);
366+
if (t < cnt) {
367+
cnt = t;
368+
ans = i;
369+
}
370+
}
371+
372+
return ans;
373+
}
374+
```
375+
332376
<!-- tabs:end -->
333377

334378
<!-- solution:end -->
@@ -522,6 +566,152 @@ function findTheCity(n: number, edges: number[][], distanceThreshold: number): n
522566
}
523567
```
524568

569+
#### JavaScript
570+
571+
```js
572+
function findTheCity(n, edges, distanceThreshold) {
573+
const g = Array.from({ length: n }, () => Array(n).fill(Infinity));
574+
for (const [f, t, w] of edges) {
575+
g[f][t] = g[t][f] = w;
576+
}
577+
for (let k = 0; k < n; ++k) {
578+
g[k][k] = 0;
579+
for (let i = 0; i < n; ++i) {
580+
for (let j = 0; j < n; ++j) {
581+
g[i][j] = Math.min(g[i][j], g[i][k] + g[k][j]);
582+
}
583+
}
584+
}
585+
586+
let ans = n,
587+
cnt = n + 1;
588+
for (let i = n - 1; i >= 0; --i) {
589+
const t = g[i].filter(x => x <= distanceThreshold).length;
590+
if (t < cnt) {
591+
cnt = t;
592+
ans = i;
593+
}
594+
}
595+
return ans;
596+
}
597+
```
598+
599+
<!-- tabs:end -->
600+
601+
<!-- solution:end -->
602+
603+
<!-- solution:start -->
604+
605+
### Solution 3
606+
607+
<!-- tabs:start -->
608+
609+
#### TypeScript
610+
611+
```ts
612+
function findTheCity(n: number, edges: number[][], distanceThreshold: number): number {
613+
const MAX = Number.POSITIVE_INFINITY;
614+
const g = Array.from({ length: n }, () => new Map<number, number>());
615+
const dist: number[] = Array(n).fill(MAX);
616+
const vis: boolean[] = Array(n).fill(false);
617+
for (const [f, t, w] of edges) {
618+
g[f].set(t, w);
619+
g[t].set(f, w);
620+
}
621+
622+
const dijkstra = (u: number): number => {
623+
dist.fill(MAX);
624+
vis.fill(false);
625+
dist[u] = 0;
626+
const pq = new MinPriorityQueue();
627+
pq.enqueue(u, 0);
628+
629+
while (!pq.isEmpty()) {
630+
const u = pq.dequeue().element;
631+
if (vis[u]) continue;
632+
vis[u] = true;
633+
634+
for (const [v, w] of g[u]) {
635+
if (vis[v]) continue;
636+
637+
const wNext = dist[u] + w;
638+
if (wNext < dist[v]) {
639+
dist[v] = wNext;
640+
pq.enqueue(v, dist[v]);
641+
}
642+
}
643+
}
644+
645+
return dist.filter(d => d <= distanceThreshold).length;
646+
};
647+
648+
let ans = n;
649+
let cnt = MAX;
650+
for (let i = n - 1; i >= 0; --i) {
651+
const t = dijkstra(i);
652+
if (t < cnt) {
653+
cnt = t;
654+
ans = i;
655+
}
656+
}
657+
658+
return ans;
659+
}
660+
```
661+
662+
#### JavaScript
663+
664+
```js
665+
export function findTheCity(n, edges, distanceThreshold) {
666+
const MAX = Number.POSITIVE_INFINITY;
667+
const g = Array.from({ length: n }, () => new Map());
668+
const dist = Array(n).fill(MAX);
669+
const vis = Array(n).fill(false);
670+
for (const [f, t, w] of edges) {
671+
g[f].set(t, w);
672+
g[t].set(f, w);
673+
}
674+
675+
const dijkstra = u => {
676+
dist.fill(MAX);
677+
vis.fill(false);
678+
dist[u] = 0;
679+
const pq = new MinPriorityQueue();
680+
pq.enqueue(u, 0);
681+
682+
while (!pq.isEmpty()) {
683+
const u = pq.dequeue().element;
684+
if (vis[u]) continue;
685+
vis[u] = true;
686+
687+
for (const [v, w] of g[u]) {
688+
if (vis[v]) continue;
689+
690+
const wNext = dist[u] + w;
691+
if (wNext < dist[v]) {
692+
dist[v] = wNext;
693+
pq.enqueue(v, dist[v]);
694+
}
695+
}
696+
}
697+
698+
return dist.filter(d => d <= distanceThreshold).length;
699+
};
700+
701+
let ans = n;
702+
let cnt = MAX;
703+
for (let i = n - 1; i >= 0; --i) {
704+
const t = dijkstra(i);
705+
if (t < cnt) {
706+
cnt = t;
707+
ans = i;
708+
}
709+
}
710+
711+
return ans;
712+
}
713+
```
714+
525715
<!-- tabs:end -->
526716

527717
<!-- solution:end -->

0 commit comments

Comments
 (0)