Requires a N:M multi-map for optimal solution

This mapping has 3 multi-map groups: several pairings are equally correct there. The code view shows one arbitrary valid pairing, not the only one.

This mapping has 3 all-to-all groups: every node on one side corresponds to every node on the other, and none is deleted or inserted. Each member carries an all N:M badge; selecting one highlights all of its counterparts, in the tree and in the code view alike.

Code view:

A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.

Before

1fn find_duplicate(nums: &[i32]) -> Option<i32> {
2 // Brute force approach
3 for i in 0..nums.len() {
4 for j in i+1..nums.len() {
5 if nums[i] == nums[j] {
6 return Some(nums[i]);
7 }
8 }
9 }
10 None
11}
12
13fn main() {
14 let nums = vec![1, 3, 4, 2, 2];
15 if let Some(dup) = find_duplicate(&nums) {
…lines 16–20 unchanged (5 lines)

After

1use std::collections::HashSet;
2
3fn find_duplicate(nums: &[i32]) -> Option<i32> {
4 // HashSet approach - O(n) time complexity
5 let mut seen = HashSet::new();
6
7 for &num in nums {
8 if seen.contains(&num) {
9 return Some(num);
10 }
11 seen.insert(num);
12 }
13
14 None
15}
16
17fn main() {
18 let nums = vec![1, 3, 4, 2, 2];
…lines 19–24 unchanged (6 lines)

Before

source_file
function_item
fn "fn"
identifier "find_duplicate"
parameters
( "("
parameter
identifier "nums"
: ":"
reference_type
& "&"
array_type
[ "["
primitive_type "i32"
] "]"
) ")"
-> "->"
generic_type
type_identifier "Option"
type_arguments
< "<"
primitive_type "i32"
> ">"
block
{ "{"
line_comment
// "//"
expression_statement any 2:1
for_expression any 2:1
for "for" all 2:1
identifier "i"
in "in"
range_expression
integer_literal "0"
.. ".."
call_expression
field_expression
identifier "nums"
. "."
field_identifier "len"
arguments
( "("
) ")"
block any 2:1
{ "{" all 2:1
expression_statement any 2:1
for_expression any 2:1
for "for" all 2:1
identifier "j"
in "in"
range_expression
binary_expression
identifier "i"
+ "+"
integer_literal "1"
.. ".."
call_expression
field_expression
identifier "nums"
. "."
field_identifier "len"
arguments
( "("
) ")"
block any 2:1
{ "{" all 2:1
expression_statement
if_expression
if "if"
binary_expression
index_expression
identifier "nums"
[ "["
identifier "i"
] "]"
== "=="
index_expression
identifier "nums"
[ "["
identifier "j"
] "]"
block
{ "{"
expression_statement
return_expression
return "return"
call_expression
identifier "Some"
arguments
( "("
index_expression
identifier "nums"
[ "["
identifier "i"
] "]"
) ")"
; ";"
} "}"
} "}" all 2:1
} "}" all 2:1
identifier "None"
} "}"
function_item (+82 nodes collapsed)

After

source_file
use_declaration
use "use"
scoped_identifier
scoped_identifier
identifier "std"
:: "::"
identifier "collections"
:: "::"
identifier "HashSet"
; ";"
function_item
fn "fn"
identifier "find_duplicate"
parameters
( "("
parameter
identifier "nums"
: ":"
reference_type
& "&"
array_type
[ "["
primitive_type "i32"
] "]"
) ")"
-> "->"
generic_type
type_identifier "Option"
type_arguments
< "<"
primitive_type "i32"
> ">"
block
{ "{"
line_comment
// "//"
let_declaration
let "let"
mutable_specifier "mut"
identifier "seen"
= "="
call_expression
scoped_identifier
identifier "HashSet"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
expression_statement any 2:1
for_expression any 2:1
for "for" all 2:1
reference_pattern
& "&"
identifier "num"
in "in"
identifier "nums"
block any 2:1
{ "{" all 2:1
expression_statement
if_expression
if "if"
call_expression
field_expression
identifier "seen"
. "."
field_identifier "contains"
arguments
( "("
reference_expression
& "&"
identifier "num"
) ")"
block
{ "{"
expression_statement
return_expression
return "return"
call_expression
identifier "Some"
arguments
( "("
identifier "num"
) ")"
; ";"
} "}"
expression_statement
call_expression
field_expression
identifier "seen"
. "."
field_identifier "insert"
arguments
( "("
identifier "num"
) ")"
; ";"
} "}" all 2:1
identifier "None"
} "}"
function_item (+82 nodes collapsed)