From 9ee8d8951cbf3c9d94633012ce72d38c894136cb Mon Sep 17 00:00:00 2001 From: QueensleyC Date: Wed, 11 Dec 2024 20:29:53 +0100 Subject: [PATCH 1/2] Solution to 1046 --- .../1046.last-stone-weight.jl | 32 +++++++++++++++++-- test/problems/1046.last-stone-weight.jl | 12 +++++++ 2 files changed, 41 insertions(+), 3 deletions(-) rename src/{unresolved => problems}/1046.last-stone-weight.jl (58%) create mode 100644 test/problems/1046.last-stone-weight.jl diff --git a/src/unresolved/1046.last-stone-weight.jl b/src/problems/1046.last-stone-weight.jl similarity index 58% rename from src/unresolved/1046.last-stone-weight.jl rename to src/problems/1046.last-stone-weight.jl index 735548009..067b85d34 100644 --- a/src/unresolved/1046.last-stone-weight.jl +++ b/src/problems/1046.last-stone-weight.jl @@ -1,8 +1,8 @@ # --- # title: 1046. Last Stone Weight # id: problem1046 -# author: Tian Jun -# date: 2020-10-31 +# author: Queensley E +# date: 2024-12-11 # difficulty: Easy # categories: Heap, Greedy # link: @@ -44,7 +44,33 @@ # # ## @lc code=start -using LeetCode +# using LeetCode + +using DataStructures + +function last_stone_weight(stones::Vector{Int64}) + # Create a PriorityQueue with unique identifiers for each stone + heap = PriorityQueue{Tuple{Int64, Int64}, Int64}() + for (i, stone) in enumerate(stones) + enqueue!(heap, (stone, i), -stone) # Use negative stone value for max-heap + end + + while length(heap) > 1 + # Extract the two largest stones + largest, _ = dequeue!(heap) + second_largest, _ = dequeue!(heap) + + # If they are not the same, calculate the difference and enqueue it + if largest != second_largest + enqueue!(heap, (largest - second_largest, length(heap) + 1), -(largest - second_largest)) + end + end + + # Return the last stone or 0 if the heap is empty + return isempty(heap) ? 0 : first(first(collect(keys(heap)))) +end + +last_stone_weight([2, 7, 4, 1, 8, 2]) ## add your code here: ## @lc code=end diff --git a/test/problems/1046.last-stone-weight.jl b/test/problems/1046.last-stone-weight.jl new file mode 100644 index 000000000..704111508 --- /dev/null +++ b/test/problems/1046.last-stone-weight.jl @@ -0,0 +1,12 @@ +using Test + +@testset "1046.last-stone-weight.jl" begin + + @test last_stone_weight([2, 7, 4, 1, 8, 1]) == 1 # Problem example + @test last_stone_weight([1, 1]) == 0 # All stones cancel out + @test last_stone_weight([5]) == 5 # Single stone + @test last_stone_weight([10, 4, 3]) == 3 # Large differences + @test last_stone_weight([8, 8, 2, 2, 3]) == 1 # Mixed case + @test last_stone_weight([7, 6, 7, 6]) == 0 # Multiple canceling pairs + +end \ No newline at end of file From a29782d4f5f86093758f7fa42d7dcc1b4a1b9416 Mon Sep 17 00:00:00 2001 From: QueensleyC Date: Wed, 11 Dec 2024 20:34:51 +0100 Subject: [PATCH 2/2] Solution to 1046 --- src/problems/1046.last-stone-weight.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/problems/1046.last-stone-weight.jl b/src/problems/1046.last-stone-weight.jl index 067b85d34..4a6735e84 100644 --- a/src/problems/1046.last-stone-weight.jl +++ b/src/problems/1046.last-stone-weight.jl @@ -44,7 +44,7 @@ # # ## @lc code=start -# using LeetCode +using LeetCode using DataStructures