Skip to content

Commit 376ca03

Browse files
authored
Merge pull request #762 from fartem/380_Insert_Delete_GetRandom_O1
2024-11-01 v. 6.9.4: added "380. Insert Delete GetRandom O(1)"
2 parents 2e5568a + 1d0b130 commit 376ca03

File tree

4 files changed

+60
-1
lines changed

4 files changed

+60
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,3 +559,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
559559
| 371. Sum of Two Integers | [Link](https://leetcode.com/problems/sum-of-two-integers/) | [Link](./lib/medium/371_sum_of_two_integers.rb) | [Link](./test/medium/test_371_sum_of_two_integers.rb) |
560560
| 377. Combination Sum IV | [Link](https://leetcode.com/problems/combination-sum-iv/) | [Link](./lib/medium/377_combination_sum_iv.rb) | [Link](./test/medium/test_377_combination_sum_iv.rb) |
561561
| 378. Kth Smallest Element in a Sorted Matrix | [Link](https://leetcode.com/problems/kth-smallest-element-in-a-sorted-matrix/) | [Link](./lib/medium/378_kth_smallest_element_in_a_sorted_matrix.rb) | [Link](./test/medium/test_378_kth_smallest_element_in_a_sorted_matrix.rb) |
562+
| 380. Insert Delete GetRandom O(1) | [Link](https://leetcode.com/problems/insert-delete-getrandom-o1/) | [Link](./lib/medium/380_insert_delete_getrandom_o1.rb) | [Link](./test/medium/test_380_insert_delete_getrandom_o1.rb) |

leetcode-ruby.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ require 'English'
55
::Gem::Specification.new do |s|
66
s.required_ruby_version = '>= 3.0'
77
s.name = 'leetcode-ruby'
8-
s.version = '6.9.3'
8+
s.version = '6.9.4'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/insert-delete-getrandom-o1/
4+
class RandomizedSet
5+
# Init
6+
def initialize
7+
@table = {}
8+
@values = []
9+
end
10+
11+
# @param {Integer} val
12+
# @return {Boolean}
13+
def insert(val)
14+
return false if @table[val]
15+
16+
@table[val] = @values.size
17+
@values << val
18+
19+
true
20+
end
21+
22+
# @param {Integer} val
23+
# @return {Boolean}
24+
def remove(val)
25+
return false unless @table[val]
26+
27+
last_val = @values.pop
28+
unless val == last_val
29+
@table[last_val] = @table[val]
30+
@values[@table[val]] = last_val
31+
end
32+
33+
@table.delete(val)
34+
35+
true
36+
end
37+
38+
# @rerturn {Integer}
39+
def get_random = @values[rand(@values.size)]
40+
end
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/medium/380_insert_delete_getrandom_o1'
5+
require 'minitest/autorun'
6+
7+
class InsertDeleteGetRandomO1Test < ::Minitest::Test
8+
def test_default_one
9+
randomized_set = ::RandomizedSet.new
10+
assert(randomized_set.insert(1))
11+
assert(!randomized_set.remove(2))
12+
assert(randomized_set.insert(2))
13+
assert(randomized_set.get_random == 1 || randomized_set.get_random == 2)
14+
assert(randomized_set.remove(1))
15+
assert(!randomized_set.insert(2))
16+
assert_equal(2, randomized_set.get_random)
17+
end
18+
end

0 commit comments

Comments
 (0)