From 479513d8213bbac91d985bb0bbfee343deb74490 Mon Sep 17 00:00:00 2001 From: fluttermiddlepodcast Date: Sun, 2 Mar 2025 08:36:26 +0300 Subject: [PATCH] added "1670. Design Front Middle Back Queue" --- README.md | 7 ++-- .../design_front_middle_back_queue.dart | 42 +++++++++++++++++++ .../design_front_middle_back_queue_test.dart | 26 ++++++++++++ 3 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 lib/medium/design_front_middle_back_queue.dart create mode 100644 test/medium/design_front_middle_back_queue_test.dart diff --git a/README.md b/README.md index 923a265..16c6714 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Solutions from [LeetCode](https://leetcode.com) on Dart. ## Easy | Name | LeetCode | Solution | -|---------------------------------------------|------------------------------------------------------------------------------|---------------------------------------------------------------| +| ------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------- | | 9. Palindrome Number | [Link](https://leetcode.com/problems/palindrome-number/) | [Link](./lib/easy/palindrome_number.dart) | | 26. Remove Duplicates from Sorted Array | [Link](https://leetcode.com/problems/remove-duplicates-from-sorted-array/) | [Link](./lib/easy/remove_duplicates_from_sorted_array.dart) | | 27. Remove Element | [Link](https://leetcode.com/problems/remove-element/) | [Link](./lib/easy/remove_element.dart) | @@ -33,16 +33,17 @@ Solutions from [LeetCode](https://leetcode.com) on Dart. ## Medium | Name | LeetCode | Solution | -|----------------------------------------|-------------------------------------------------------------------------|------------------------------------------------------------| +| -------------------------------------- | ----------------------------------------------------------------------- | ---------------------------------------------------------- | | 12. Integer to Roman | [Link](https://leetcode.com/problems/integer-to-roman/) | [Link](./lib/medium/integer_to_roman.dart) | | 222. Count Complete Tree Nodes | [Link](https://leetcode.com/problems/count-complete-tree-nodes/) | [Link](./lib/medium/count_complete_tree_nodes.dart) | | 230. Kth Smallest Element in a BST | [Link](https://leetcode.com/problems/kth-smallest-element-in-a-bst/) | [Link](./lib/medium/kth_smallest_element_in_a_bst.dart) | | 328. Odd Even Linked List | [Link](https://leetcode.com/problems/odd-even-linked-list/) | [Link](./lib/medium/odd_even_linked_list.dart) | | 1325. Delete Leaves With a Given Value | [Link](https://leetcode.com/problems/delete-leaves-with-a-given-value/) | [Link](./lib/medium/delete_leaves_with_a_given_value.dart) | +| 1670. Design Front Middle Back Queue | [Link](https://leetcode.com/problems/design-front-middle-back-queue/) | [Link](./lib/medium/design_front_middle_back_queue.dart) | ## Hard | Name | LeetCode | Solution | -|-------------------------------|------------------------------------------------------------------|---------------------------------------------------| +| ----------------------------- | ---------------------------------------------------------------- | ------------------------------------------------- | | 23. Merge k Sorted Lists | [Link](https://leetcode.com/problems/merge-k-sorted-lists/) | [Link](./lib/hard/merge_k_sorted_lists.dart) | | 32. Longest Valid Parentheses | [Link](https://leetcode.com/problems/longest-valid-parentheses/) | [Link](./lib/hard/longest_valid_parentheses.dart) | diff --git a/lib/medium/design_front_middle_back_queue.dart b/lib/medium/design_front_middle_back_queue.dart new file mode 100644 index 0000000..d0b512f --- /dev/null +++ b/lib/medium/design_front_middle_back_queue.dart @@ -0,0 +1,42 @@ +class FrontMiddleBackQueue { + final _list = []; + + void pushFront(int val) { + _list.insert(0, val); + } + + void pushMiddle(int val) { + _list.insert(_list.length ~/ 2, val); + } + + void pushBack(int val) { + _list.add(val); + } + + int popFront() { + if (_list.isEmpty) { + return -1; + } + + return _list.removeAt(0); + } + + int popMiddle() { + if (_list.isEmpty) { + return -1; + } + + var size = _list.length; + var index = size % 2 == 0 ? size ~/ 2 - 1 : size ~/ 2; + + return _list.removeAt(index); + } + + int popBack() { + if (_list.isEmpty) { + return -1; + } + + return _list.removeLast(); + } +} diff --git a/test/medium/design_front_middle_back_queue_test.dart b/test/medium/design_front_middle_back_queue_test.dart new file mode 100644 index 0000000..1bfb529 --- /dev/null +++ b/test/medium/design_front_middle_back_queue_test.dart @@ -0,0 +1,26 @@ +import 'package:leetcode_dart/medium/design_front_middle_back_queue.dart'; +import 'package:test/test.dart'; + +void main() { + group( + 'Example tests', + () { + test( + 'Example test', + () { + FrontMiddleBackQueue q = FrontMiddleBackQueue(); + q.pushFront(1); + q.pushBack(2); + q.pushMiddle(3); + q.pushMiddle(4); + + expect(1, q.popFront()); + expect(3, q.popMiddle()); + expect(4, q.popMiddle()); + expect(2, q.popBack()); + expect(-1, q.popFront()); + }, + ); + }, + ); +}