File tree 1 file changed +28
-0
lines changed
scripts/algorithms/L/Longest Arithmetic Subsequence of Given Difference
1 file changed +28
-0
lines changed Original file line number Diff line number Diff line change
1
+ // Runtime: 3 ms (Top 100.0%) | Memory: 3.00 MB (Top 86.96%)
2
+
3
+ const RANGE_MIN : i32 = -10_000 ;
4
+ const RANGE_MAX : i32 = 10_000 ;
5
+
6
+ impl Solution {
7
+ pub fn longest_subsequence ( arr : Vec < i32 > , difference : i32 ) -> i32 {
8
+ let range = ( RANGE_MAX - RANGE_MIN + 1 ) as usize ;
9
+ fn offset ( i : i32 ) -> Option < usize > {
10
+ if RANGE_MIN <= i && i <= RANGE_MAX {
11
+ Some ( ( i - RANGE_MIN ) as usize )
12
+ } else {
13
+ None
14
+ }
15
+ }
16
+ /// "Length when last seen"; longest subseq when we last saw that arr[i] value
17
+ let mut lwls = vec ! [ 0_i32 ; range] ;
18
+ let mut best = 1 ;
19
+ for & a in arr. iter ( ) . rev ( ) {
20
+ let old = offset ( a + difference) . map ( |i| lwls[ i] ) . unwrap_or ( 0 ) ;
21
+ let new_idx = offset ( a) . unwrap ( ) ; // safety: problem constraints
22
+ let len = lwls[ new_idx] . max ( old + 1 ) ;
23
+ lwls[ new_idx] = len;
24
+ best = best. max ( len) ;
25
+ }
26
+ best
27
+ }
28
+ }
You can’t perform that action at this time.
0 commit comments