aboutsummaryrefslogtreecommitdiff
path: root/closest_node_2_nodes.rs
diff options
context:
space:
mode:
Diffstat (limited to 'closest_node_2_nodes.rs')
-rw-r--r--closest_node_2_nodes.rs45
1 files changed, 0 insertions, 45 deletions
diff --git a/closest_node_2_nodes.rs b/closest_node_2_nodes.rs
deleted file mode 100644
index ea3ee86..0000000
--- a/closest_node_2_nodes.rs
+++ /dev/null
@@ -1,45 +0,0 @@
-struct Solution;
-
-impl Solution {
- pub fn closest_meeting_node(edges: Vec<i32>, node1: i32, node2: i32) -> i32 {
- let n = edges.len();
- let (mut d1, mut d2) = (vec![n; n], vec![n; n]);
- d1[node1 as usize] = 0;
- d2[node2 as usize] = 0;
- let mut u = node1 as usize;
- while edges[u] != -1 {
- let v = edges[u] as usize;
- if d1[v] < d1[u] {
- break;
- }
- d1[v] = d1[u] + 1;
- u = v;
- }
- u = node2 as usize;
- while edges[u] != -1 {
- let v = edges[u] as usize;
- if d2[v] < d2[u] {
- break;
- }
- d2[v] = d2[u] + 1;
- u = v;
- }
- let (mut ans, mut mx) = (-1i32, n);
- for i in 0..n {
- let tmp = d1[i].max(d2[i]);
- if tmp >= mx {
- continue;
- }
- ans = i as i32;
- mx = tmp;
- }
- ans
- }
-}
-
-fn main() {
- let edges1 = vec![2,2,3,-1];
- let edges2 = vec![1,2,-1];
- println!("{}", Solution::closest_meeting_node(edges1, 0, 1)); //expect: 2
- println!("{}", Solution::closest_meeting_node(edges2, 0, 2)); //expect: 2
-}