├── 0001-two-sum
├── 0001-two-sum.js
├── NOTES.md
└── README.md
├── 0004-median-of-two-sorted-arrays
├── 0004-median-of-two-sorted-arrays.js
├── NOTES.md
└── README.md
├── 0005-longest-palindromic-substring
├── 0005-longest-palindromic-substring.js
├── NOTES.md
└── README.md
├── 0013-roman-to-integer
├── 0013-roman-to-integer.js
├── NOTES.md
└── README.md
├── 0020-valid-parentheses
├── 0020-valid-parentheses.js
├── 0020-valid-parentheses.py
├── NOTES.md
└── README.md
├── 0026-remove-duplicates-from-sorted-array
├── 0026-remove-duplicates-from-sorted-array.js
├── NOTES.md
└── README.md
├── 0027-remove-element
├── 0027-remove-element.js
├── NOTES.md
└── README.md
├── 0028-find-the-index-of-the-first-occurrence-in-a-string
├── 0028-find-the-index-of-the-first-occurrence-in-a-string.js
├── NOTES.md
└── README.md
├── 0035-search-insert-position
├── 0035-search-insert-position.js
├── NOTES.md
└── README.md
├── 0058-length-of-last-word
├── 0058-length-of-last-word.js
├── NOTES.md
└── README.md
├── 0071-simplify-path
├── 0071-simplify-path.js
├── NOTES.md
└── README.md
├── 0073-set-matrix-zeroes
├── 0073-set-matrix-zeroes.js
├── NOTES.md
└── README.md
├── 0074-search-a-2d-matrix
├── 0074-search-a-2d-matrix.js
├── NOTES.md
└── README.md
├── 0094-binary-tree-inorder-traversal
├── 0094-binary-tree-inorder-traversal.js
├── NOTES.md
└── README.md
├── 0118-pascals-triangle
├── 0118-pascals-triangle.js
├── NOTES.md
└── README.md
├── 0121-best-time-to-buy-and-sell-stock
├── 0121-best-time-to-buy-and-sell-stock.py
├── NOTES.md
└── README.md
├── 0136-single-number
├── 0136-single-number.js
├── NOTES.md
└── README.md
├── 0144-binary-tree-preorder-traversal
├── 0144-binary-tree-preorder-traversal.js
├── NOTES.md
└── README.md
├── 0145-binary-tree-postorder-traversal
├── 0145-binary-tree-postorder-traversal.js
├── NOTES.md
└── README.md
├── 0162-find-peak-element
├── 0162-find-peak-element.js
├── NOTES.md
└── README.md
├── 0169-majority-element
├── 0169-majority-element.js
├── NOTES.md
└── README.md
├── 0175-combine-two-tables
├── 0175-combine-two-tables.sql
├── NOTES.md
└── README.md
├── 0182-duplicate-emails
├── 0182-duplicate-emails.sql
├── NOTES.md
└── README.md
├── 0183-customers-who-never-order
├── 0183-customers-who-never-order.sql
└── README.md
├── 0184-department-highest-salary
├── 0184-department-highest-salary.sql
├── NOTES.md
└── README.md
├── 0197-rising-temperature
├── 0197-rising-temperature.sql
├── NOTES.md
└── README.md
├── 0202-happy-number
├── 0202-happy-number.js
├── NOTES.md
└── README.md
├── 0205-isomorphic-strings
├── 0205-isomorphic-strings.js
├── NOTES.md
└── README.md
├── 0209-minimum-size-subarray-sum
├── 0209-minimum-size-subarray-sum.js
├── NOTES.md
└── README.md
├── 0217-contains-duplicate
├── 0217-contains-duplicate.js
├── NOTES.md
└── README.md
├── 0228-summary-ranges
├── 0228-summary-ranges.js
├── NOTES.md
└── README.md
├── 0258-add-digits
├── 0258-add-digits.js
├── NOTES.md
└── README.md
├── 0290-word-pattern
├── 0290-word-pattern.js
├── NOTES.md
└── README.md
├── 0303-range-sum-query-immutable
├── 0303-range-sum-query-immutable.js
├── NOTES.md
└── README.md
├── 0344-reverse-string
├── 0344-reverse-string.js
├── NOTES.md
└── README.md
├── 0345-reverse-vowels-of-a-string
├── 0345-reverse-vowels-of-a-string.js
├── NOTES.md
└── README.md
├── 0347-top-k-frequent-elements
├── 0347-top-k-frequent-elements.js
└── NOTES.md
├── 0349-intersection-of-two-arrays
├── 0349-intersection-of-two-arrays.js
├── NOTES.md
└── README.md
├── 0442-find-all-duplicates-in-an-array
├── 0442-find-all-duplicates-in-an-array.js
├── NOTES.md
└── README.md
├── 0448-find-all-numbers-disappeared-in-an-array
├── 0448-find-all-numbers-disappeared-in-an-array.js
├── NOTES.md
└── README.md
├── 0451-sort-characters-by-frequency
├── 0451-sort-characters-by-frequency.js
├── NOTES.md
└── README.md
├── 0496-next-greater-element-i
├── 0496-next-greater-element-i.js
├── NOTES.md
└── README.md
├── 0511-game-play-analysis-i
├── 0511-game-play-analysis-i.sql
├── NOTES.md
└── README.md
├── 0530-minimum-absolute-difference-in-bst
├── 0530-minimum-absolute-difference-in-bst.js
├── NOTES.md
└── README.md
├── 0532-k-diff-pairs-in-an-array
├── 0532-k-diff-pairs-in-an-array.js
├── NOTES.md
└── README.md
├── 0535-encode-and-decode-tinyurl
├── 0535-encode-and-decode-tinyurl.js
├── NOTES.md
└── README.md
├── 0557-reverse-words-in-a-string-iii
├── 0557-reverse-words-in-a-string-iii.js
├── NOTES.md
└── README.md
├── 0595-big-countries
├── 0595-big-countries.sql
├── NOTES.md
└── README.md
├── 0596-classes-more-than-5-students
├── 0596-classes-more-than-5-students.sql
├── NOTES.md
└── README.md
├── 0605-can-place-flowers
├── 0605-can-place-flowers.js
├── NOTES.md
└── README.md
├── 0619-biggest-single-number
├── 0619-biggest-single-number.sql
├── NOTES.md
└── README.md
├── 0620-not-boring-movies
├── 0620-not-boring-movies.sql
├── NOTES.md
└── README.md
├── 0627-swap-salary
├── 0627-swap-salary.sql
├── NOTES.md
└── README.md
├── 0682-baseball-game
├── 0682-baseball-game.js
├── NOTES.md
└── README.md
├── 0692-top-k-frequent-words
├── 0692-top-k-frequent-words.js
├── NOTES.md
└── README.md
├── 0705-design-hashset
├── 0705-design-hashset.js
├── NOTES.md
└── README.md
├── 0706-design-hashmap
├── 0706-design-hashmap.js
├── NOTES.md
└── README.md
├── 0724-find-pivot-index
├── 0724-find-pivot-index.js
├── NOTES.md
└── README.md
├── 0783-minimum-distance-between-bst-nodes
├── 0783-minimum-distance-between-bst-nodes.js
├── NOTES.md
└── README.md
├── 0791-custom-sort-string
├── 0791-custom-sort-string.js
├── NOTES.md
└── README.md
├── 0804-unique-morse-code-words
├── 0804-unique-morse-code-words.js
└── README.md
├── 0832-flipping-an-image
├── 0832-flipping-an-image.js
├── NOTES.md
└── README.md
├── 0844-backspace-string-compare
├── 0844-backspace-string-compare.js
├── NOTES.md
└── README.md
├── 0852-peak-index-in-a-mountain-array
├── 0852-peak-index-in-a-mountain-array.js
├── NOTES.md
└── README.md
├── 0867-transpose-matrix
├── 0867-transpose-matrix.js
├── NOTES.md
└── README.md
├── 0874-backspace-string-compare
├── 0874-backspace-string-compare.js
└── README.md
├── 0905-sort-array-by-parity
├── 0905-sort-array-by-parity.js
├── NOTES.md
└── README.md
├── 0929-unique-email-addresses
├── 0929-unique-email-addresses.js
├── NOTES.md
└── README.md
├── 0961-n-repeated-element-in-size-2n-array
├── 0961-n-repeated-element-in-size-2n-array.js
├── NOTES.md
└── README.md
├── 0977-squares-of-a-sorted-array
├── 0977-squares-of-a-sorted-array.js
├── NOTES.md
└── README.md
├── 0985-sum-of-even-numbers-after-queries
├── 0985-sum-of-even-numbers-after-queries.js
├── NOTES.md
└── README.md
├── 0989-add-to-array-form-of-integer
├── 0989-add-to-array-form-of-integer.py
├── NOTES.md
└── README.md
├── 1047-remove-all-adjacent-duplicates-in-string
├── 1047-remove-all-adjacent-duplicates-in-string.js
├── NOTES.md
└── README.md
├── 1050-actors-and-directors-who-cooperated-at-least-three-times
├── 1050-actors-and-directors-who-cooperated-at-least-three-times.sql
├── NOTES.md
└── README.md
├── 1051-height-checker
├── 1051-height-checker.js
├── NOTES.md
└── README.md
├── 1068-product-sales-analysis-i
├── 1068-product-sales-analysis-i.sql
├── NOTES.md
└── README.md
├── 1075-project-employees-i
├── 1075-project-employees-i.sql
├── NOTES.md
└── README.md
├── 1108-defanging-an-ip-address
├── 1108-defanging-an-ip-address.js
├── NOTES.md
└── README.md
├── 1122-relative-sort-array
├── 1122-relative-sort-array.js
├── NOTES.md
└── README.md
├── 1128-remove-all-adjacent-duplicates-in-string
├── 1128-remove-all-adjacent-duplicates-in-string.js
└── README.md
├── 1136-actors-and-directors-who-cooperated-at-least-three-times
├── 1136-actors-and-directors-who-cooperated-at-least-three-times.sql
└── README.md
├── 1158-market-analysis-i
├── 1158-market-analysis-i.sql
├── NOTES.md
└── README.md
├── 1268-market-analysis-i
├── 1268-market-analysis-i.sql
└── README.md
├── 1282-group-the-people-given-the-group-size-they-belong-to
├── 1282-group-the-people-given-the-group-size-they-belong-to.js
├── NOTES.md
└── README.md
├── 1323-maximum-69-number
├── 1323-maximum-69-number.js
├── NOTES.md
└── README.md
├── 1343-number-of-sub-arrays-of-size-k-and-average-greater-than-or-equal-to-threshold
├── 1343-number-of-sub-arrays-of-size-k-and-average-greater-than-or-equal-to-threshold.js
├── NOTES.md
└── README.md
├── 1351-count-negative-numbers-in-a-sorted-matrix
├── 1351-count-negative-numbers-in-a-sorted-matrix.js
├── NOTES.md
└── README.md
├── 1357-apply-discount-every-n-orders
├── 1357-apply-discount-every-n-orders.js
├── NOTES.md
└── README.md
├── 1365-how-many-numbers-are-smaller-than-the-current-number
├── 1365-how-many-numbers-are-smaller-than-the-current-number.js
├── NOTES.md
└── README.md
├── 1381-design-a-stack-with-increment-operation
├── 1381-design-a-stack-with-increment-operation.js
├── NOTES.md
└── README.md
├── 1393-capital-gain-loss
├── 1393-capital-gain-loss.sql
├── NOTES.md
└── README.md
├── 1394-find-lucky-integer-in-an-array
├── 1394-find-lucky-integer-in-an-array.js
├── NOTES.md
└── README.md
├── 1407-top-travellers
├── 1407-top-travellers.sql
├── NOTES.md
└── README.md
├── 1436-destination-city
├── 1436-destination-city.js
├── NOTES.md
└── README.md
├── 1484-group-sold-products-by-the-date
├── 1484-group-sold-products-by-the-date.sql
├── NOTES.md
└── README.md
├── 1496-path-crossing
├── 1496-path-crossing.js
├── NOTES.md
└── README.md
├── 1502-can-make-arithmetic-progression-from-sequence
├── 1502-can-make-arithmetic-progression-from-sequence.js
├── NOTES.md
└── README.md
├── 1512-number-of-good-pairs
├── 1512-number-of-good-pairs.js
├── NOTES.md
└── README.md
├── 1528-shuffle-string
├── 1528-shuffle-string.js
└── NOTES.md
├── 1541-top-travellers
├── 1541-top-travellers.sql
└── README.md
├── 1572-matrix-diagonal-sum
├── 1572-matrix-diagonal-sum.js
├── NOTES.md
└── README.md
├── 1587-bank-account-summary-ii
├── 1587-bank-account-summary-ii.sql
├── NOTES.md
└── README.md
├── 1588-sum-of-all-odd-length-subarrays
├── 1588-sum-of-all-odd-length-subarrays.js
├── NOTES.md
└── README.md
├── 1598-crawler-log-folder
├── 1598-crawler-log-folder.js
├── 1598-crawler-log-folder.py
├── NOTES.md
└── README.md
├── 1603-design-parking-system
├── 1603-design-parking-system.js
├── NOTES.md
└── README.md
├── 1603-running-sum-of-1d-array
├── 1603-running-sum-of-1d-array.js
└── README.md
├── 1614-maximum-nesting-depth-of-the-parentheses
├── 1614-maximum-nesting-depth-of-the-parentheses.js
├── NOTES.md
└── README.md
├── 1624-largest-substring-between-two-equal-characters
├── 1624-largest-substring-between-two-equal-characters.js
├── NOTES.md
└── README.md
├── 1625-group-sold-products-by-the-date
├── 1625-group-sold-products-by-the-date.sql
└── README.md
├── 1630-arithmetic-subarrays
├── 1630-arithmetic-subarrays.js
├── NOTES.md
└── README.md
├── 1633-percentage-of-users-attended-a-contest
├── 1633-percentage-of-users-attended-a-contest.sql
├── NOTES.md
└── README.md
├── 1636-sort-array-by-increasing-frequency
├── 1636-sort-array-by-increasing-frequency.js
├── NOTES.md
└── README.md
├── 1672-richest-customer-wealth
├── 1672-richest-customer-wealth.js
├── NOTES.md
└── README.md
├── 1683-invalid-tweets
├── 1683-invalid-tweets.sql
├── NOTES.md
└── README.md
├── 1693-daily-leads-and-partners
├── 1693-daily-leads-and-partners.sql
├── NOTES.md
└── README.md
├── 1700-number-of-students-unable-to-eat-lunch
├── 1700-number-of-students-unable-to-eat-lunch.js
├── NOTES.md
└── README.md
├── 1729-find-followers-count
├── 1729-find-followers-count.sql
├── NOTES.md
└── README.md
├── 1732-find-the-highest-altitude
├── 1732-find-the-highest-altitude.js
├── NOTES.md
└── README.md
├── 1737-maximum-nesting-depth-of-the-parentheses
├── 1737-maximum-nesting-depth-of-the-parentheses.js
└── README.md
├── 1748-sum-of-unique-elements
├── 1748-sum-of-unique-elements.js
├── NOTES.md
└── README.md
├── 1768-merge-strings-alternately
├── 1768-merge-strings-alternately.js
├── NOTES.md
└── README.md
├── 1773-count-items-matching-a-rule
├── 1773-count-items-matching-a-rule.js
├── NOTES.md
└── README.md
├── 1816-truncate-sentence
├── 1816-truncate-sentence.js
├── NOTES.md
└── README.md
├── 1817-finding-the-users-active-minutes
├── 1817-finding-the-users-active-minutes.js
├── NOTES.md
└── README.md
├── 1865-finding-pairs-with-a-certain-sum
├── 1865-finding-pairs-with-a-certain-sum.js
├── NOTES.md
└── README.md
├── 1873-calculate-special-bonus
├── 1873-calculate-special-bonus.sql
└── README.md
├── 1876-substrings-of-size-three-with-distinct-characters
├── 1876-substrings-of-size-three-with-distinct-characters.js
├── NOTES.md
└── README.md
├── 1877-find-followers-count
├── 1877-find-followers-count.sql
└── README.md
├── 1903-largest-odd-number-in-string
├── 1903-largest-odd-number-in-string.js
├── NOTES.md
└── README.md
├── 1920-build-array-from-permutation
├── 1920-build-array-from-permutation.js
├── NOTES.md
└── README.md
├── 1929-concatenation-of-array
├── 1929-concatenation-of-array.js
├── NOTES.md
└── README.md
├── 1965-employees-with-missing-information
├── 1965-employees-with-missing-information.sql
├── NOTES.md
└── README.md
├── 1984-minimum-difference-between-highest-and-lowest-of-k-scores
├── 1984-minimum-difference-between-highest-and-lowest-of-k-scores.py
├── NOTES.md
└── README.md
├── 1991-find-the-middle-index-in-array
├── 1991-find-the-middle-index-in-array.js
├── NOTES.md
└── README.md
├── 2006-count-number-of-pairs-with-absolute-difference-k
├── 2006-count-number-of-pairs-with-absolute-difference-k.js
├── NOTES.md
└── README.md
├── 2070-most-beautiful-item-for-each-query
├── 2070-most-beautiful-item-for-each-query.js
├── NOTES.md
└── README.md
├── 2079-watering-plants
├── 2079-watering-plants.js
├── NOTES.md
└── README.md
├── 2089-find-target-indices-after-sorting-array
├── 2089-find-target-indices-after-sorting-array.js
├── NOTES.md
└── README.md
├── 2090-k-radius-subarray-averages
├── 2090-k-radius-subarray-averages.js
├── NOTES.md
└── README.md
├── 2125-number-of-laser-beams-in-a-bank
├── 2125-number-of-laser-beams-in-a-bank.js
├── NOTES.md
└── README.md
├── 2154-keep-multiplying-found-values-by-two
├── 2154-keep-multiplying-found-values-by-two.js
├── NOTES.md
└── README.md
├── 2215-find-the-difference-of-two-arrays
├── 2215-find-the-difference-of-two-arrays.js
├── NOTES.md
└── README.md
├── 2243-calculate-digit-sum-of-a-string
├── 2243-calculate-digit-sum-of-a-string.js
├── NOTES.md
└── README.md
├── 2270-number-of-ways-to-split-array
├── 2270-number-of-ways-to-split-array.js
├── NOTES.md
└── README.md
├── 2284-sender-with-largest-word-count
├── 2284-sender-with-largest-word-count.js
├── NOTES.md
└── README.md
├── 2352-equal-row-and-column-pairs
├── 2352-equal-row-and-column-pairs.js
├── NOTES.md
└── README.md
├── 2356-number-of-unique-subjects-taught-by-each-teacher
├── 2356-number-of-unique-subjects-taught-by-each-teacher.sql
├── NOTES.md
└── README.md
├── 2373-largest-local-values-in-a-matrix
├── 2373-largest-local-values-in-a-matrix.js
├── NOTES.md
└── README.md
├── 2389-longest-subsequence-with-limited-sum
├── 2389-longest-subsequence-with-limited-sum.js
├── NOTES.md
└── README.md
├── 2390-removing-stars-from-a-string
├── 2390-removing-stars-from-a-string.js
├── NOTES.md
└── README.md
├── 2391-minimum-amount-of-time-to-collect-garbage
├── 2391-minimum-amount-of-time-to-collect-garbage.js
├── NOTES.md
└── README.md
├── 2404-most-frequent-even-element
├── 2404-most-frequent-even-element.js
├── NOTES.md
└── README.md
├── 2418-sort-the-people
├── 2418-sort-the-people.js
├── NOTES.md
└── README.md
├── 2428-maximum-sum-of-an-hourglass
├── 2428-maximum-sum-of-an-hourglass.js
├── NOTES.md
└── README.md
├── 2455-average-value-of-even-numbers-that-are-divisible-by-three
├── 2455-average-value-of-even-numbers-that-are-divisible-by-three.js
├── NOTES.md
└── README.md
├── 2460-apply-operations-to-an-array
├── 2460-apply-operations-to-an-array.js
├── NOTES.md
└── README.md
├── 2465-number-of-distinct-averages
├── 2465-number-of-distinct-averages.js
├── NOTES.md
└── README.md
├── 2470-removing-stars-from-a-string
├── 2470-removing-stars-from-a-string.js
└── README.md
├── 2500-delete-greatest-value-in-each-row
├── 2500-delete-greatest-value-in-each-row.js
├── NOTES.md
└── README.md
├── 2535-difference-between-element-sum-and-digit-sum-of-an-array
├── 2535-difference-between-element-sum-and-digit-sum-of-an-array.js
├── NOTES.md
└── README.md
├── 2545-sort-the-students-by-their-kth-score
├── 2545-sort-the-students-by-their-kth-score.js
├── NOTES.md
└── README.md
├── 2554-maximum-number-of-integers-to-choose-from-a-range-i
├── 2554-maximum-number-of-integers-to-choose-from-a-range-i.js
├── NOTES.md
└── README.md
├── 2562-find-the-array-concatenation-value
├── 2562-find-the-array-concatenation-value.js
├── NOTES.md
└── README.md
├── 2574-left-and-right-sum-differences
├── 2574-left-and-right-sum-differences.js
├── NOTES.md
└── README.md
├── 2586-count-the-number-of-vowel-strings-in-range
├── 2586-count-the-number-of-vowel-strings-in-range.js
├── NOTES.md
└── README.md
├── 2610-convert-an-array-into-a-2d-array-with-conditions
├── 2610-convert-an-array-into-a-2d-array-with-conditions.js
├── NOTES.md
└── README.md
├── 2620-counter
├── 2620-counter.js
├── NOTES.md
└── README.md
├── 2626-array-reduce-transformation
├── 2626-array-reduce-transformation.js
├── NOTES.md
└── README.md
├── 2629-function-composition
├── 2629-function-composition.js
├── NOTES.md
└── README.md
├── 2634-filter-elements-from-array
├── 2634-filter-elements-from-array.js
├── NOTES.md
└── README.md
├── 2635-apply-transform-over-each-element-in-array
├── 2635-apply-transform-over-each-element-in-array.js
├── NOTES.md
└── README.md
├── 2640-find-the-score-of-all-prefixes-of-an-array
├── 2640-find-the-score-of-all-prefixes-of-an-array.js
├── NOTES.md
└── README.md
├── 2648-generate-fibonacci-sequence
├── 2648-generate-fibonacci-sequence.js
├── NOTES.md
└── README.md
├── 2652-sum-multiples
├── 2652-sum-multiples.js
├── NOTES.md
└── README.md
├── 2656-maximum-sum-with-exactly-k-elements
├── 2656-maximum-sum-with-exactly-k-elements.js
├── NOTES.md
└── README.md
├── 2657-find-the-prefix-common-array-of-two-arrays
├── 2657-find-the-prefix-common-array-of-two-arrays.js
├── NOTES.md
└── README.md
├── 2665-counter-ii
├── 2665-counter-ii.js
├── NOTES.md
└── README.md
├── 2667-create-hello-world-function
├── 2667-create-hello-world-function.js
├── NOTES.md
└── README.md
├── 2670-find-the-distinct-difference-array
├── 2670-find-the-distinct-difference-array.js
├── NOTES.md
└── README.md
├── 2677-chunk-array
├── 2677-chunk-array.js
├── NOTES.md
└── README.md
├── 2678-number-of-senior-citizens
├── 2678-number-of-senior-citizens.js
├── NOTES.md
└── README.md
├── 2729-check-if-the-number-is-fascinating
├── 2729-check-if-the-number-is-fascinating.js
├── NOTES.md
└── README.md
├── 2732-counter
├── 2732-counter.js
└── README.md
├── 2785-sort-vowels-in-a-string
├── 2785-sort-vowels-in-a-string.js
├── NOTES.md
└── README.md
├── 2809-create-hello-world-function
├── 2809-create-hello-world-function.js
└── README.md
├── 2870-minimum-number-of-operations-to-make-array-empty
├── 2870-minimum-number-of-operations-to-make-array-empty.py
├── NOTES.md
└── README.md
└── README.md
/0001-two-sum/0001-two-sum.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @param {number} target
4 | * @return {number[]}
5 | */
6 | var twoSum = function(nums, target) {
7 | let map = new Map()
8 |
9 | for (let i = 0; i < nums.length; i++) {
10 | let cur = target-nums[i]
11 | if(map.has(cur)){
12 | return [map.get(cur), i]
13 | }
14 |
15 | map.set(nums[i], i)
16 |
17 | }
18 | };
--------------------------------------------------------------------------------
/0001-two-sum/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0004-median-of-two-sorted-arrays/0004-median-of-two-sorted-arrays.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums1
3 | * @param {number[]} nums2
4 | * @return {number}
5 | */
6 | var findMedianSortedArrays = function(nums1, nums2) {
7 | let merged = [...nums1, ...nums2].sort((a, b) => a - b);
8 | merged.sort((a, b) => a-b)
9 | let total = merged.length
10 |
11 | if(total % 2 === 0){
12 | let mid = total / 2;
13 | return med = (merged[mid] + merged[mid-1]) / 2
14 | } else {
15 | return merged[Math.floor(total/2)]
16 | }
17 | };
--------------------------------------------------------------------------------
/0004-median-of-two-sorted-arrays/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0004-median-of-two-sorted-arrays/README.md:
--------------------------------------------------------------------------------
1 |
349. Intersection of Two ArraysEasy
Given two integer arrays nums1
and nums2
, return an array of their intersection. Each element in the result must be unique and you may return the result in any order.
2 |
3 |
4 |
Example 1:
5 |
6 |
Input: nums1 = [1,2,2,1], nums2 = [2,2]
7 | Output: [2]
8 |
9 |
10 |
Example 2:
11 |
12 |
Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
13 | Output: [9,4]
14 | Explanation: [4,9] is also accepted.
15 |
16 |
17 |
18 |
Constraints:
19 |
20 |
21 | 1 <= nums1.length, nums2.length <= 1000
22 | 0 <= nums1[i], nums2[i] <= 1000
23 |
24 |
--------------------------------------------------------------------------------
/0442-find-all-duplicates-in-an-array/0442-find-all-duplicates-in-an-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number[]}
4 | */
5 | var findDuplicates = function(nums) {
6 | const counter = {};
7 | const duplicates = [];
8 |
9 | nums.forEach(num => {
10 | counter[num] = (counter[num] || 0) + 1;
11 | if (counter[num] === 2) {
12 | duplicates.push(num);
13 | }
14 | });
15 |
16 | return duplicates;
17 | };
--------------------------------------------------------------------------------
/0442-find-all-duplicates-in-an-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0442-find-all-duplicates-in-an-array/README.md:
--------------------------------------------------------------------------------
1 | Medium
Given an integer array nums
of length n
where all the integers of nums
are in the range [1, n]
and each integer appears once or twice, return an array of all the integers that appears twice.
2 |
3 |
You must write an algorithm that runs in O(n)
time and uses only constant extra space.
4 |
5 |
6 |
Example 1:
7 |
Input: nums = [4,3,2,7,8,2,3,1]
8 | Output: [2,3]
9 |
Example 2:
10 |
Input: nums = [1,1,2]
11 | Output: [1]
12 |
Example 3:
13 |
Input: nums = [1]
14 | Output: []
15 |
16 |
17 |
Constraints:
18 |
19 |
20 | n == nums.length
21 | 1 <= n <= 105
22 | 1 <= nums[i] <= n
23 | - Each element in
nums
appears once or twice.
24 |
25 |
--------------------------------------------------------------------------------
/0448-find-all-numbers-disappeared-in-an-array/0448-find-all-numbers-disappeared-in-an-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number[]}
4 | */
5 | var findDisappearedNumbers = function(nums) {
6 | let res = []
7 |
8 | let map = new Map()
9 | for (let i = 0; i < nums.length; i++) {
10 | const element = nums[i]
11 | map.set(element, (map.get(element) || 0) + 1)
12 | }
13 | for (let i = 1; i <= nums.length; i++) {
14 | if(!map.has(i)) res.push(i)
15 | }
16 | return res
17 | };
--------------------------------------------------------------------------------
/0448-find-all-numbers-disappeared-in-an-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0448-find-all-numbers-disappeared-in-an-array/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given an array nums
of n
integers where nums[i]
is in the range [1, n]
, return an array of all the integers in the range [1, n]
that do not appear in nums
.
2 |
3 |
4 |
Example 1:
5 |
Input: nums = [4,3,2,7,8,2,3,1]
6 | Output: [5,6]
7 |
Example 2:
8 |
Input: nums = [1,1]
9 | Output: [2]
10 |
11 |
12 |
Constraints:
13 |
14 |
15 | n == nums.length
16 | 1 <= n <= 105
17 | 1 <= nums[i] <= n
18 |
19 |
20 |
21 |
Follow up: Could you do it without extra space and in O(n)
runtime? You may assume the returned list does not count as extra space.
22 |
--------------------------------------------------------------------------------
/0451-sort-characters-by-frequency/0451-sort-characters-by-frequency.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} s
3 | * @return {string}
4 | */
5 | var frequencySort = function(s) {
6 | let map = new Map()
7 | let res = []
8 | for (let i = 0; i < s.length; i++) {
9 | const element = s[i];
10 | map.set(element, (map.get(element) || 0) + 1)
11 | }
12 |
13 | const result = Array.from(map.entries()).sort((a, b) => b[1] - a[1]);
14 |
15 | for (let i = 0; i < result.length; i++) {
16 | for (let j = 0; j < result[i][1]; j++) {
17 | res.push(result[i][0])
18 | }
19 | }
20 |
21 | return res.join("")
22 | };
--------------------------------------------------------------------------------
/0451-sort-characters-by-frequency/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0496-next-greater-element-i/0496-next-greater-element-i.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums1
3 | * @param {number[]} nums2
4 | * @return {number[]}
5 | */
6 | var nextGreaterElement = function(nums1, nums2) {
7 | const hashmap = {};
8 | const output = [];
9 |
10 | for (let i = 0; i < nums2.length; i++) {
11 | hashmap[nums2[i]] = i;
12 | }
13 |
14 | for (let i = 0; i < nums1.length; i++) {
15 | const number = nums1[i];
16 | for (let j = hashmap[number]; j < nums2.length; j++) {
17 | if (nums2[j] > number) {
18 | output.push(nums2[j]);
19 | break;
20 | }
21 | if (j === nums2.length - 1) {
22 | output.push(-1);
23 | }
24 | }
25 | }
26 |
27 | return output;
28 | };
--------------------------------------------------------------------------------
/0496-next-greater-element-i/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0511-game-play-analysis-i/0511-game-play-analysis-i.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | SELECT player_id, MIN(event_date) as 'first_login'
4 | FROM Activity
5 | GROUP BY player_id
--------------------------------------------------------------------------------
/0511-game-play-analysis-i/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0530-minimum-absolute-difference-in-bst/0530-minimum-absolute-difference-in-bst.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Definition for a binary tree node.
3 | * function TreeNode(val, left, right) {
4 | * this.val = (val===undefined ? 0 : val)
5 | * this.left = (left===undefined ? null : left)
6 | * this.right = (right===undefined ? null : right)
7 | * }
8 | */
9 | /**
10 | * @param {TreeNode} root
11 | * @return {number}
12 | */
13 | var getMinimumDifference = function(root) {
14 | let minDiff = Infinity;
15 | let prevValue = null;
16 |
17 | function dfs(node) {
18 | if (node === null) {
19 | return;
20 | }
21 | dfs(node.left);
22 | if (prevValue !== null) {
23 | minDiff = Math.min(minDiff, Math.abs(node.val - prevValue));
24 | }
25 | prevValue = node.val;
26 | dfs(node.right);
27 | }
28 |
29 | dfs(root);
30 | return minDiff;
31 | };
--------------------------------------------------------------------------------
/0530-minimum-absolute-difference-in-bst/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0530-minimum-absolute-difference-in-bst/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given the root
of a Binary Search Tree (BST), return the minimum absolute difference between the values of any two different nodes in the tree.
2 |
3 |
4 |
Example 1:
5 |

6 |
Input: root = [4,2,6,1,3]
7 | Output: 1
8 |
9 |
10 |
Example 2:
11 |

12 |
Input: root = [1,0,48,null,null,12,49]
13 | Output: 1
14 |
15 |
16 |
17 |
Constraints:
18 |
19 |
20 | - The number of nodes in the tree is in the range
[2, 104]
.
21 | 0 <= Node.val <= 105
22 |
23 |
24 |
25 |
Note: This question is the same as 783: https://leetcode.com/problems/minimum-distance-between-bst-nodes/
26 |
--------------------------------------------------------------------------------
/0532-k-diff-pairs-in-an-array/0532-k-diff-pairs-in-an-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @param {number} k
4 | * @return {number}
5 | */
6 | var findPairs = function(nums, k) {
7 | let set = new Set();
8 |
9 | for (let i = 0; i < nums.length; i++) {
10 | const element = nums[i];
11 | for (let j = i + 1; j < nums.length; j++) {
12 | const diff = nums[j];
13 | if (diff === element + k || diff === element - k) {
14 | const smaller = Math.min(element, diff);
15 | const larger = Math.max(element, diff);
16 | set.add(`${smaller}, ${larger}`);
17 | }
18 | }
19 | }
20 |
21 | return set.size;
22 | };
--------------------------------------------------------------------------------
/0532-k-diff-pairs-in-an-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0535-encode-and-decode-tinyurl/0535-encode-and-decode-tinyurl.js:
--------------------------------------------------------------------------------
1 | const linkCode = new Map();
2 | const urlAsli = new Map();
3 | const chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
4 |
5 | const getCode = () =>
6 | "http://tinyurl.com/" +
7 | Array.from({ length: 6 }, () => chars.charAt(Math.random() * 62)).join("");
8 |
9 | const encode = (longUrl) => {
10 | if (urlAsli.has(longUrl)) {
11 | return urlAsli.get(longUrl);
12 | }
13 |
14 | let code = getCode();
15 | while (linkCode.has(code)) {
16 | code = getCode();
17 | }
18 |
19 | linkCode.set(code, longUrl);
20 | urlAsli.set(longUrl, code);
21 |
22 | return code;
23 | };
24 |
25 | const decode = (shortUrl) => linkCode.get(shortUrl);
--------------------------------------------------------------------------------
/0535-encode-and-decode-tinyurl/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0557-reverse-words-in-a-string-iii/0557-reverse-words-in-a-string-iii.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} s
3 | * @return {string}
4 | */
5 | var reverseWords = function(s) {
6 | let split = s.split(' ')
7 | let res = []
8 |
9 | split.forEach((element, index) => {
10 | let reverseKata = element.split('')
11 | for (let i = reverseKata.length-1; i >= 0; i--) {
12 | res.push(reverseKata[i]);
13 | }
14 | index === split.length - 1 ? res.push() : res.push(' ');
15 | })
16 | return res.join('')
17 | };
--------------------------------------------------------------------------------
/0557-reverse-words-in-a-string-iii/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0557-reverse-words-in-a-string-iii/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given a string s
, reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.
2 |
3 |
4 |
Example 1:
5 |
Input: s = "Let's take LeetCode contest"
6 | Output: "s'teL ekat edoCteeL tsetnoc"
7 |
Example 2:
8 |
Input: s = "God Ding"
9 | Output: "doG gniD"
10 |
11 |
12 |
Constraints:
13 |
14 |
15 | 1 <= s.length <= 5 * 104
16 | s
contains printable ASCII characters.
17 | s
does not contain any leading or trailing spaces.
18 | - There is at least one word in
s
.
19 | - All the words in
s
are separated by a single space.
20 |
21 |
--------------------------------------------------------------------------------
/0595-big-countries/0595-big-countries.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 | SELECT name, population, area
3 | FROM world
4 | WHERE area >= 3000000 OR population >= 25000000
5 | ORDER BY name
--------------------------------------------------------------------------------
/0595-big-countries/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0596-classes-more-than-5-students/0596-classes-more-than-5-students.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 |
4 | SELECT class
5 | FROM Courses
6 | GROUP BY class
7 | HAVING count(class) >= 5
--------------------------------------------------------------------------------
/0596-classes-more-than-5-students/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0605-can-place-flowers/0605-can-place-flowers.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} flowerbed
3 | * @param {number} n
4 | * @return {boolean}
5 | */
6 | var canPlaceFlowers = function (flowerbed, n) {
7 | for (let i = 0; i < flowerbed.length; i++) {
8 | if (flowerbed[i] === 1) continue;
9 |
10 | if (
11 | (i === 0 || flowerbed[i - 1] === 0) &&
12 | (i === flowerbed.length - 1 || flowerbed[i + 1] === 0)
13 | ) {
14 | flowerbed[i] = 1;
15 | n--;
16 | }
17 | }
18 |
19 | return n <= 0;
20 | };
--------------------------------------------------------------------------------
/0605-can-place-flowers/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0605-can-place-flowers/README.md:
--------------------------------------------------------------------------------
1 | Easy
You have a long flowerbed in which some of the plots are planted, and some are not. However, flowers cannot be planted in adjacent plots.
2 |
3 |
Given an integer array flowerbed
containing 0
's and 1
's, where 0
means empty and 1
means not empty, and an integer n
, return true
if n
new flowers can be planted in the flowerbed
without violating the no-adjacent-flowers rule and false
otherwise.
4 |
5 |
6 |
Example 1:
7 |
Input: flowerbed = [1,0,0,0,1], n = 1
8 | Output: true
9 |
Example 2:
10 |
Input: flowerbed = [1,0,0,0,1], n = 2
11 | Output: false
12 |
13 |
14 |
Constraints:
15 |
16 |
17 | 1 <= flowerbed.length <= 2 * 104
18 | flowerbed[i]
is 0
or 1
.
19 | - There are no two adjacent flowers in
flowerbed
.
20 | 0 <= n <= flowerbed.length
21 |
22 |
--------------------------------------------------------------------------------
/0619-biggest-single-number/0619-biggest-single-number.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | SELECT ifnull(
4 | (SELECT num
5 | FROM MyNumbers
6 | GROUP BY num
7 | HAVING count(*)=1
8 | ORDER BY num DESC limit 1),null) AS num
--------------------------------------------------------------------------------
/0619-biggest-single-number/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0620-not-boring-movies/0620-not-boring-movies.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | SELECT id, movie, description, rating
4 | FROM Cinema
5 | WHERE id % 2 = 1 AND description != "boring"
6 | ORDER BY rating DESC
7 |
8 |
--------------------------------------------------------------------------------
/0620-not-boring-movies/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0627-swap-salary/0627-swap-salary.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | UPDATE salary
4 | SET sex = CASE
5 | WHEN sex = 'm' THEN 'f'
6 | WHEN sex = 'f' THEN 'm'
7 | END
--------------------------------------------------------------------------------
/0627-swap-salary/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0682-baseball-game/0682-baseball-game.js:
--------------------------------------------------------------------------------
1 | class Stack {
2 | constructor() {
3 | this.stack = [];
4 | }
5 |
6 | push(item) {
7 | this.stack.push(item);
8 | }
9 |
10 | pop() {
11 | if (this.isEmpty()) {
12 | return "Stack kosong";
13 | }
14 | return this.stack.pop();
15 | }
16 |
17 | peek() {
18 | return this.stack[this.stack.length - 1];
19 | }
20 |
21 | isEmpty() {
22 | return this.stack.length === 0;
23 | }
24 |
25 | plus(){
26 | return parseInt(this.stack[this.stack.length - 1]) + parseInt(this.stack[this.stack.length - 2])
27 | }
28 |
29 | getSum(){
30 | let sum = 0
31 | for (let i = 0; i < this.stack.length; i++) {
32 | sum+= parseInt(this.stack[i]);
33 | }
34 | return sum
35 | }
36 | }
37 |
38 |
39 | var calPoints = function (operations) {
40 | let stack = new Stack();
41 |
42 | let sum = 0
43 | operations.forEach((element) => {
44 | if (element === "C") {
45 | stack.pop()
46 | } else if(element === "D"){
47 | stack.push(stack.peek() * 2)
48 | } else if(element === "+"){
49 | stack.push(stack.plus())
50 | } else {
51 | stack.push(element)
52 | }
53 | });
54 |
55 | return stack.getSum()
56 | };
57 |
58 | console.log(calPoints(["5", "2", "C", "D", "+"]));
59 |
--------------------------------------------------------------------------------
/0682-baseball-game/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0692-top-k-frequent-words/0692-top-k-frequent-words.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string[]} words
3 | * @param {number} k
4 | * @return {string[]}
5 | */
6 | var topKFrequent = function (words, k) {
7 | let map = new Map();
8 | words.forEach((element) => map.set(element, (map.get(element) || 0) + 1));
9 |
10 | return Array.from(map.entries()).sort((a, b) => {
11 | let countCompare = b[1] - a[1];
12 | //bandingkan sesuai leksikografis jika value nya sama
13 | if (countCompare === 0) {
14 | return a[0].localeCompare(b[0]);
15 | } else {
16 | return countCompare;
17 | }
18 | }).slice(0, k).map((entry) => entry[0])
19 | };
--------------------------------------------------------------------------------
/0692-top-k-frequent-words/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0705-design-hashset/0705-design-hashset.js:
--------------------------------------------------------------------------------
1 | var MyHashSet = function () {
2 | this.set = new Set()
3 | };
4 |
5 | /**
6 | * @param {number} key
7 | * @return {void}
8 | */
9 | MyHashSet.prototype.add = function (key) {
10 | this.set.add(key)
11 | };
12 |
13 | /**
14 | * @param {number} key
15 | * @return {void}
16 | */
17 | MyHashSet.prototype.remove = function (key) {
18 | this.set.delete(key)
19 | };
20 |
21 | /**
22 | * @param {number} key
23 | * @return {boolean}
24 | */
25 | MyHashSet.prototype.contains = function (key) {
26 | return this.set.has(key)
27 | };
28 |
29 | /**
30 | * Your MyHashSet object will be instantiated and called as such:
31 | * var obj = new MyHashSet()
32 | * obj.add(key)
33 | * obj.remove(key)
34 | * var param_3 = obj.contains(key)
35 | */
--------------------------------------------------------------------------------
/0705-design-hashset/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0706-design-hashmap/0706-design-hashmap.js:
--------------------------------------------------------------------------------
1 | var MyHashMap = function () {
2 | this.map = new Map()
3 | };
4 |
5 | /**
6 | * @param {number} key
7 | * @param {number} value
8 | * @return {void}
9 | */
10 | MyHashMap.prototype.put = function (key, value) {
11 | this.map.set(key, value)
12 | };
13 |
14 | /**
15 | * @param {number} key
16 | * @return {number}
17 | */
18 | MyHashMap.prototype.get = function (key) {
19 | if(this.map.has(key)){
20 | return this.map.get(key)
21 | } else {
22 | return -1
23 | }
24 | };
25 |
26 | /**
27 | * @param {number} key
28 | * @return {void}
29 | */
30 | MyHashMap.prototype.remove = function (key) {
31 | this.map.delete(key)
32 | };
--------------------------------------------------------------------------------
/0706-design-hashmap/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0724-find-pivot-index/0724-find-pivot-index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number}
4 | */
5 | var pivotIndex = function (nums) {
6 | //melalukan rumus prefix sum
7 | let prefixSum = [];
8 | prefixSum[0] = nums[0]
9 | for (let i = 1; i < nums.length; i++) {
10 | prefixSum[i] = prefixSum[i-1] + nums[i]
11 | }
12 |
13 | //melakukan perulangan sampai mendapatkan value yang sama
14 | for (let i = 0; i < nums.length; i++) {
15 | let a = prefixSum[i-1];
16 | if(!a) a=0
17 | const b = prefixSum[nums.length - 1] - prefixSum[i+1-1]
18 | if(a==b) return i
19 | }
20 |
21 | //kembalikan -1 jika tidak ada yang sama di perulangan sblmnya
22 | return -1;
23 | };
--------------------------------------------------------------------------------
/0724-find-pivot-index/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0783-minimum-distance-between-bst-nodes/0783-minimum-distance-between-bst-nodes.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Definition for a binary tree node.
3 | * function TreeNode(val, left, right) {
4 | * this.val = (val===undefined ? 0 : val)
5 | * this.left = (left===undefined ? null : left)
6 | * this.right = (right===undefined ? null : right)
7 | * }
8 | */
9 | /**
10 | * @param {TreeNode} root
11 | * @return {number}
12 | */
13 | var minDiffInBST = function(root) {
14 | let min = Number.MAX_SAFE_INTEGER;
15 | let prev = null
16 |
17 | const dfs = (node) => {
18 | if(!node) return;
19 |
20 | dfs(node.left)
21 | if(prev != null) {
22 | min = Math.min(min, node.val-prev)
23 | }
24 | prev = node.val
25 | dfs(node.right)
26 | }
27 |
28 | dfs(root)
29 | return min
30 | };
--------------------------------------------------------------------------------
/0783-minimum-distance-between-bst-nodes/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0783-minimum-distance-between-bst-nodes/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given the root
of a Binary Search Tree (BST), return the minimum difference between the values of any two different nodes in the tree.
2 |
3 |
4 |
Example 1:
5 |

6 |
Input: root = [4,2,6,1,3]
7 | Output: 1
8 |
9 |
10 |
Example 2:
11 |

12 |
Input: root = [1,0,48,null,null,12,49]
13 | Output: 1
14 |
15 |
16 |
17 |
Constraints:
18 |
19 |
20 | - The number of nodes in the tree is in the range
[2, 100]
.
21 | 0 <= Node.val <= 105
22 |
23 |
24 |
25 |
Note: This question is the same as 530: https://leetcode.com/problems/minimum-absolute-difference-in-bst/
26 |
--------------------------------------------------------------------------------
/0791-custom-sort-string/0791-custom-sort-string.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} order
3 | * @param {string} s
4 | * @return {string}
5 | */
6 | const customSortString = (order, s) => {
7 | let orderMap = new Map();
8 | for (let i = 0; i < order.length; i++) {
9 | orderMap.set(order[i], i);
10 | }
11 |
12 | let chars = s.split("");
13 |
14 | chars.sort((a, b) => (orderMap.get(a) || 0) - (orderMap.get(b) || 0));
15 |
16 | let sortedString = chars.join("");
17 |
18 | return sortedString;
19 | };
--------------------------------------------------------------------------------
/0791-custom-sort-string/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0804-unique-morse-code-words/0804-unique-morse-code-words.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string[]} words
3 | * @return {number}
4 | */
5 |
6 | const alphabet = {
7 | a: '.-', b: '-...', c: '-.-.', d: '-..', e: '.', f: '..-.', g: '--.', h: '....', i: '..', j: '.---', k: '-.-', l: '.-..', m: '--',
8 | n: '-.', o: '---', p: '.--.', q: '--.-', r: '.-.', s: '...', t: '-', u: '..-', v: '...-', w: '.--', x: '-..-', y: '-.--', z: '--..'
9 | }
10 |
11 | var uniqueMorseRepresentations = function(words) {
12 | let morses = words.map((word) => {
13 | let chars = [...word];
14 | let morse = chars.map((char) => alphabet[char]).join("");
15 | return morse;
16 | });
17 |
18 | let uniqueSet = new Set(morses);
19 | return uniqueSet.size;
20 | };
--------------------------------------------------------------------------------
/0832-flipping-an-image/0832-flipping-an-image.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[][]} image
3 | * @return {number[][]}
4 | */
5 | var flipAndInvertImage = function(image) {
6 | let res = []
7 |
8 | image.forEach(element => {
9 | let reversed = element.reverse()
10 | let temp = []
11 | reversed.map((element) => {
12 | if(element === 0){
13 | temp.push(1)
14 | } else {
15 | temp.push(0)
16 | }
17 | })
18 | res.push([...temp])
19 | });
20 |
21 | return res
22 | };
--------------------------------------------------------------------------------
/0832-flipping-an-image/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0844-backspace-string-compare/0844-backspace-string-compare.js:
--------------------------------------------------------------------------------
1 | class Stack{
2 | constructor(){
3 | this.stack = []
4 | }
5 |
6 | push(element){
7 | this.stack.push(element)
8 | }
9 |
10 | pop(){
11 | if(this.isEmpty()) return "Stack Kosong"
12 | return this.stack.pop()
13 | }
14 |
15 | isEmpty(){
16 | return this.stack.length === 0
17 | }
18 |
19 | peek(){
20 | return this.stack[this.stack.length - 1]
21 | }
22 |
23 | size(){
24 | return this.stack.length
25 | }
26 |
27 | print(){
28 | let string = ""
29 | for(let i = 0; i < this.stack.length; i++){
30 | string += this.stack[i]
31 | }
32 | return string
33 | }
34 | }
35 |
36 |
37 |
38 | var backspaceCompare = function(s, t) {
39 | let stack1 = new Stack()
40 | let stack2 = new Stack()
41 |
42 | s.split("").forEach((element) => {
43 | if(element === "#"){
44 | stack1.pop()
45 | } else {
46 | stack1.push(element)
47 | }
48 | })
49 |
50 | t.split("").forEach((element) => {
51 | if(element === "#"){
52 | stack2.pop()
53 | } else {
54 | stack2.push(element)
55 | }
56 | })
57 |
58 | return stack1.print() === stack2.print()
59 |
60 | };
--------------------------------------------------------------------------------
/0844-backspace-string-compare/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0852-peak-index-in-a-mountain-array/0852-peak-index-in-a-mountain-array.js:
--------------------------------------------------------------------------------
1 | var peakIndexInMountainArray = function (arr) {
2 | let left = 0;
3 | let right = arr.length - 1;
4 |
5 | while (left <= right) {
6 | let mid = Math.floor((left + right) / 2);
7 |
8 | if (arr[mid] < arr[mid - 1]) {
9 | right = mid - 1;
10 | } else {
11 | left = mid + 1
12 | }
13 | }
14 |
15 | return right
16 | };
--------------------------------------------------------------------------------
/0852-peak-index-in-a-mountain-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0867-transpose-matrix/0867-transpose-matrix.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[][]} matrix
3 | * @return {number[][]}
4 | */
5 | var transpose = function(matrix) {
6 | let res = []
7 | for (let i = 0; i < matrix[0].length; i++) {
8 | let temp = []
9 | for (let j = 0; j < matrix.length; j++) {
10 | let tranpose = matrix[j][i]
11 | temp.push(tranpose)
12 | }
13 | res.push(temp)
14 | }
15 |
16 | return res
17 | };
--------------------------------------------------------------------------------
/0867-transpose-matrix/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0867-transpose-matrix/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given a 2D integer array matrix
, return the transpose of matrix
.
2 |
3 |
The transpose of a matrix is the matrix flipped over its main diagonal, switching the matrix's row and column indices.
4 |
5 |

6 |
7 |
8 |
Example 1:
9 |
10 |
Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
11 | Output: [[1,4,7],[2,5,8],[3,6,9]]
12 |
13 |
14 |
Example 2:
15 |
16 |
Input: matrix = [[1,2,3],[4,5,6]]
17 | Output: [[1,4],[2,5],[3,6]]
18 |
19 |
20 |
21 |
Constraints:
22 |
23 |
24 | m == matrix.length
25 | n == matrix[i].length
26 | 1 <= m, n <= 1000
27 | 1 <= m * n <= 105
28 | -109 <= matrix[i][j] <= 109
29 |
30 |
--------------------------------------------------------------------------------
/0874-backspace-string-compare/0874-backspace-string-compare.js:
--------------------------------------------------------------------------------
1 | class Stack{
2 | constructor(){
3 | this.stack = []
4 | }
5 |
6 | push(element){
7 | this.stack.push(element)
8 | }
9 |
10 | pop(){
11 | if(this.isEmpty()) return "Stack Kosong"
12 | return this.stack.pop()
13 | }
14 |
15 | isEmpty(){
16 | return this.stack.length === 0
17 | }
18 |
19 | peek(){
20 | return this.stack[this.stack.length - 1]
21 | }
22 |
23 | size(){
24 | return this.stack.length
25 | }
26 |
27 | print(){
28 | let string = ""
29 | for(let i = 0; i < this.stack.length; i++){
30 | string += this.stack[i]
31 | }
32 | return string
33 | }
34 | }
35 |
36 |
37 |
38 | var backspaceCompare = function(s, t) {
39 | let stack1 = new Stack()
40 | let stack2 = new Stack()
41 |
42 | s.split("").forEach((element) => {
43 | if(element === "#"){
44 | stack1.pop()
45 | } else {
46 | stack1.push(element)
47 | }
48 | })
49 |
50 | t.split("").forEach((element) => {
51 | if(element === "#"){
52 | stack2.pop()
53 | } else {
54 | stack2.push(element)
55 | }
56 | })
57 |
58 | return stack1.print() === stack2.print()
59 |
60 | };
--------------------------------------------------------------------------------
/0905-sort-array-by-parity/0905-sort-array-by-parity.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number[]}
4 | */
5 | var sortArrayByParity = function(nums) {
6 | let res = []
7 | let even = [] ; let odd = []
8 | nums.map((element) => {
9 | if(element % 2 === 0){
10 | even.push(element)
11 | } else {
12 | odd.push(element)
13 | }
14 | })
15 |
16 | return res.concat(even, odd)
17 | };
--------------------------------------------------------------------------------
/0905-sort-array-by-parity/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0905-sort-array-by-parity/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given an integer array nums
, move all the even integers at the beginning of the array followed by all the odd integers.
2 |
3 |
Return any array that satisfies this condition.
4 |
5 |
6 |
Example 1:
7 |
8 |
Input: nums = [3,1,2,4]
9 | Output: [2,4,3,1]
10 | Explanation: The outputs [4,2,3,1], [2,4,1,3], and [4,2,1,3] would also be accepted.
11 |
12 |
13 |
Example 2:
14 |
15 |
Input: nums = [0]
16 | Output: [0]
17 |
18 |
19 |
20 |
Constraints:
21 |
22 |
23 | 1 <= nums.length <= 5000
24 | 0 <= nums[i] <= 5000
25 |
26 |
--------------------------------------------------------------------------------
/0929-unique-email-addresses/0929-unique-email-addresses.js:
--------------------------------------------------------------------------------
1 | var numUniqueEmails = function (emails) {
2 | let counter = new Set();
3 | for (let email of emails) {
4 | let splited = email.split("@")
5 | let local = splited[0].split("+")
6 | let localfiltered = local[0].replaceAll(".", "")
7 | counter.add(localfiltered+"@"+splited[1])
8 | }
9 | return counter.size
10 | };
--------------------------------------------------------------------------------
/0929-unique-email-addresses/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0961-n-repeated-element-in-size-2n-array/0961-n-repeated-element-in-size-2n-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number}
4 | */
5 | var repeatedNTimes = function(nums) {
6 | const map = new Map();
7 | for (const num of nums) {
8 | map.set(num, (map.get(num) || 0) + 1);
9 | if (map.get(num) === nums.length / 2) return num;
10 | }
11 | };
12 |
--------------------------------------------------------------------------------
/0961-n-repeated-element-in-size-2n-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0961-n-repeated-element-in-size-2n-array/README.md:
--------------------------------------------------------------------------------
1 | Easy
You are given an integer array nums
with the following properties:
2 |
3 |
4 | nums.length == 2 * n
.
5 | nums
contains n + 1
unique elements.
6 | - Exactly one element of
nums
is repeated n
times.
7 |
8 |
9 |
Return the element that is repeated n
times.
10 |
11 |
12 |
Example 1:
13 |
Input: nums = [1,2,3,3]
14 | Output: 3
15 |
Example 2:
16 |
Input: nums = [2,1,2,5,3,2]
17 | Output: 2
18 |
Example 3:
19 |
Input: nums = [5,1,5,2,5,3,5,4]
20 | Output: 5
21 |
22 |
23 |
Constraints:
24 |
25 |
26 | 2 <= n <= 5000
27 | nums.length == 2 * n
28 | 0 <= nums[i] <= 104
29 | nums
contains n + 1
unique elements and one of them is repeated exactly n
times.
30 |
31 |
--------------------------------------------------------------------------------
/0977-squares-of-a-sorted-array/0977-squares-of-a-sorted-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number[]}
4 | */
5 | var sortedSquares = function(nums) {
6 | let res = nums.map((number)=>{
7 | return Math.abs(number)**2
8 | }).sort((a,b) => a-b)
9 | return res
10 | };
--------------------------------------------------------------------------------
/0977-squares-of-a-sorted-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0977-squares-of-a-sorted-array/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given an integer array nums
sorted in non-decreasing order, return an array of the squares of each number sorted in non-decreasing order.
2 |
3 |
4 |
Example 1:
5 |
6 |
Input: nums = [-4,-1,0,3,10]
7 | Output: [0,1,9,16,100]
8 | Explanation: After squaring, the array becomes [16,1,0,9,100].
9 | After sorting, it becomes [0,1,9,16,100].
10 |
11 |
12 |
Example 2:
13 |
14 |
Input: nums = [-7,-3,2,3,11]
15 | Output: [4,9,9,49,121]
16 |
17 |
18 |
19 |
Constraints:
20 |
21 |
22 | 1 <= nums.length <= 104
23 | -104 <= nums[i] <= 104
24 | nums
is sorted in non-decreasing order.
25 |
26 |
27 |
28 |
Follow up: Squaring each element and sorting the new array is very trivial, could you find an
O(n)
solution using a different approach?
--------------------------------------------------------------------------------
/0985-sum-of-even-numbers-after-queries/0985-sum-of-even-numbers-after-queries.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @param {number[][]} queries
4 | * @return {number[]}
5 | */
6 | var sumEvenAfterQueries = function(nums, queries) {
7 | let res = [];
8 | let evenSum = nums.reduce((acc, curr) => acc + (curr % 2 === 0 ? curr : 0), 0);
9 |
10 | for (let i = 0; i < queries.length; i++) {
11 | const val = queries[i][0];
12 | const index = queries[i][1];
13 | const prevNum = nums[index];
14 | const newNum = prevNum + val;
15 |
16 | if (prevNum % 2 === 0) {
17 | evenSum -= prevNum;
18 | }
19 | if (newNum % 2 === 0) {
20 | evenSum += newNum;
21 | }
22 |
23 | nums[index] = newNum;
24 | res.push(evenSum);
25 | }
26 |
27 | return res;
28 | };
29 |
--------------------------------------------------------------------------------
/0985-sum-of-even-numbers-after-queries/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/0989-add-to-array-form-of-integer/0989-add-to-array-form-of-integer.py:
--------------------------------------------------------------------------------
1 | class Solution:
2 | def addToArrayForm(self, num: List[int], k: int) -> List[int]:
3 |
4 | sisa = 0
5 | len_a = len(num) - 1
6 | len_b = len(str(k)) - 1
7 |
8 | res = []
9 |
10 | while len_a >= 0 or len_b >= 0 or sisa:
11 | # digit_a = int(num[len_a]) if len_a >= 0 else 0
12 | # digit_b = int(k[len_b]) if len_b >= 0 else 0
13 | digit_a = num[len_a] if len_a >= 0 else 0
14 | digit_b = int(str(k)[len_b]) if len_b >= 0 else 0
15 |
16 | total = digit_a + digit_b + sisa
17 | hasil = total % 10
18 | sisa = total // 10
19 |
20 | res.insert(0, hasil)
21 |
22 | len_a -= 1
23 | len_b -= 1
24 |
25 | return res
--------------------------------------------------------------------------------
/0989-add-to-array-form-of-integer/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1047-remove-all-adjacent-duplicates-in-string/1047-remove-all-adjacent-duplicates-in-string.js:
--------------------------------------------------------------------------------
1 | class Stack {
2 | constructor() {
3 | this.stack = [];
4 | }
5 |
6 | push(element) {
7 | this.stack.push(element);
8 | }
9 |
10 | pop() {
11 | if (this.isEmpty()) return "Stack Kosong";
12 | return this.stack.pop();
13 | }
14 |
15 | isEmpty() {
16 | return this.stack.length === 0;
17 | }
18 |
19 | peek() {
20 | return this.stack[this.stack.length - 1];
21 | }
22 |
23 | size() {
24 | return this.stack.length;
25 | }
26 |
27 | print() {
28 | let string = "";
29 | for (let i = 0; i < this.stack.length; i++) {
30 | string += this.stack[i];
31 | }
32 | return string;
33 | }
34 | }
35 |
36 | var removeDuplicates = function (s) {
37 | let stack = new Stack();
38 |
39 | for (let i = 0; i < s.length; i++) {
40 | const element = s[i];
41 | element
42 | if(stack.isEmpty() || stack.peek() !== element) {
43 | stack.push(element)
44 | } else {
45 | stack.pop()
46 | }
47 | }
48 |
49 | return stack.print();
50 | };
51 |
--------------------------------------------------------------------------------
/1047-remove-all-adjacent-duplicates-in-string/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1050-actors-and-directors-who-cooperated-at-least-three-times/1050-actors-and-directors-who-cooperated-at-least-three-times.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | SELECT actor_id, director_id
4 | FROM ActorDirector
5 | GROUP BY actor_id, director_id
6 | HAVING COUNT(timestamp) >= 3
--------------------------------------------------------------------------------
/1050-actors-and-directors-who-cooperated-at-least-three-times/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1051-height-checker/1051-height-checker.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} heights
3 | * @return {number}
4 | */
5 | var heightChecker = function(heights) {
6 | let res = 0
7 | const sorted = [...heights].sort((a, b) => a - b);
8 | for (let i = 0; i < heights.length; i++) {
9 | if(heights[i] !== sorted[i]) res++
10 | }
11 | return res
12 | };
--------------------------------------------------------------------------------
/1051-height-checker/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1068-product-sales-analysis-i/1068-product-sales-analysis-i.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | SELECT p.product_name, s.year, s.price
4 | FROM Sales s
5 | JOIN Product p ON s.product_id = p.product_id
--------------------------------------------------------------------------------
/1068-product-sales-analysis-i/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1075-project-employees-i/1075-project-employees-i.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | SELECT project_id, ROUND(AVG(experience_years),2) as average_years
4 | FROM Project p
5 | JOIN Employee e ON p.employee_id = e.employee_id
6 | GROUP BY p.project_id
--------------------------------------------------------------------------------
/1075-project-employees-i/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1108-defanging-an-ip-address/1108-defanging-an-ip-address.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} address
3 | * @return {string}
4 | */
5 | var defangIPaddr = function(address) {
6 | return address.replaceAll('.','[.]')
7 | };
--------------------------------------------------------------------------------
/1108-defanging-an-ip-address/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1108-defanging-an-ip-address/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given a valid (IPv4) IP address
, return a defanged version of that IP address.
2 |
3 |
A defanged IP address replaces every period "."
with "[.]"
.
4 |
5 |
6 |
Example 1:
7 |
Input: address = "1.1.1.1"
8 | Output: "1[.]1[.]1[.]1"
9 |
Example 2:
10 |
Input: address = "255.100.50.0"
11 | Output: "255[.]100[.]50[.]0"
12 |
13 |
14 |
Constraints:
15 |
16 |
17 | - The given
address
is a valid IPv4 address.
18 |
--------------------------------------------------------------------------------
/1122-relative-sort-array/1122-relative-sort-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} arr1
3 | * @param {number[]} arr2
4 | * @return {number[]}
5 | */
6 | var relativeSortArray = function(arr1, arr2) {
7 | let res = [];
8 | let sisa = [];
9 |
10 | let map = new Map();
11 | arr2.forEach((element) => {
12 | if (!map.has(element)) {
13 | map.set(element, 0);
14 | }
15 | });
16 |
17 | arr1.forEach((element) => {
18 | if (!map.has(element)) {
19 | sisa.push(element);
20 | } else {
21 | map.set(element, map.get(element) + 1);
22 | }
23 | });
24 |
25 | map.forEach((element, index) => {
26 | for (let i = 0; i < element; i++) {
27 | res.push(index);
28 | }
29 | });
30 |
31 | return res.concat(sisa.sort((a, b) => a - b));
32 | };
--------------------------------------------------------------------------------
/1122-relative-sort-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1122-relative-sort-array/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given two arrays arr1
and arr2
, the elements of arr2
are distinct, and all elements in arr2
are also in arr1
.
2 |
3 |
Sort the elements of arr1
such that the relative ordering of items in arr1
are the same as in arr2
. Elements that do not appear in arr2
should be placed at the end of arr1
in ascending order.
4 |
5 |
6 |
Example 1:
7 |
8 |
Input: arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
9 | Output: [2,2,2,1,4,3,3,9,6,7,19]
10 |
11 |
12 |
Example 2:
13 |
14 |
Input: arr1 = [28,6,22,8,44,17], arr2 = [22,28,8,6]
15 | Output: [22,28,8,6,17,44]
16 |
17 |
18 |
19 |
Constraints:
20 |
21 |
22 | 1 <= arr1.length, arr2.length <= 1000
23 | 0 <= arr1[i], arr2[i] <= 1000
24 | - All the elements of
arr2
are distinct.
25 | - Each
arr2[i]
is in arr1
.
26 |
27 |
--------------------------------------------------------------------------------
/1128-remove-all-adjacent-duplicates-in-string/1128-remove-all-adjacent-duplicates-in-string.js:
--------------------------------------------------------------------------------
1 | class Stack {
2 | constructor() {
3 | this.stack = [];
4 | }
5 |
6 | push(element) {
7 | this.stack.push(element);
8 | }
9 |
10 | pop() {
11 | if (this.isEmpty()) return "Stack Kosong";
12 | return this.stack.pop();
13 | }
14 |
15 | isEmpty() {
16 | return this.stack.length === 0;
17 | }
18 |
19 | peek() {
20 | return this.stack[this.stack.length - 1];
21 | }
22 |
23 | size() {
24 | return this.stack.length;
25 | }
26 |
27 | print() {
28 | let string = "";
29 | for (let i = 0; i < this.stack.length; i++) {
30 | string += this.stack[i];
31 | }
32 | return string;
33 | }
34 | }
35 |
36 | var removeDuplicates = function (s) {
37 | let stack = new Stack();
38 |
39 | for (let i = 0; i < s.length; i++) {
40 | const element = s[i];
41 | element
42 | if(stack.isEmpty() || stack.peek() !== element) {
43 | stack.push(element)
44 | } else {
45 | stack.pop()
46 | }
47 | }
48 |
49 | return stack.print();
50 | };
51 |
--------------------------------------------------------------------------------
/1136-actors-and-directors-who-cooperated-at-least-three-times/1136-actors-and-directors-who-cooperated-at-least-three-times.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | SELECT actor_id, director_id
4 | FROM ActorDirector
5 | GROUP BY actor_id, director_id
6 | HAVING COUNT(timestamp) >= 3
--------------------------------------------------------------------------------
/1158-market-analysis-i/1158-market-analysis-i.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 | SELECT u.user_id as buyer_id, u.join_date, COUNT(order_id) as orders_in_2019
3 |
4 | FROM Users u
5 | LEFT JOIN Orders o
6 | ON u.user_id = o.buyer_id
7 |
8 | AND YEAR(o.order_date)=2019
9 | GROUP BY u.user_id
10 |
--------------------------------------------------------------------------------
/1158-market-analysis-i/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1268-market-analysis-i/1268-market-analysis-i.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 | SELECT u.user_id as buyer_id, u.join_date, COUNT(order_id) as orders_in_2019
3 |
4 | FROM Users u
5 | LEFT JOIN Orders o
6 | ON u.user_id = o.buyer_id
7 |
8 | AND YEAR(o.order_date)=2019
9 | GROUP BY u.user_id
10 |
--------------------------------------------------------------------------------
/1282-group-the-people-given-the-group-size-they-belong-to/1282-group-the-people-given-the-group-size-they-belong-to.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} groupSizes
3 | * @return {number[][]}
4 | */
5 | var groupThePeople = function(groupSizes) {
6 | const result = [];
7 | const map = new Map();
8 |
9 | for (let index = 0; index < groupSizes.length; index++) {
10 | const groupSize = groupSizes[index];
11 |
12 | //periksa apakah sudah ada key nya atau belum,
13 | //jika tidak buat key dengan value array temp
14 | if (map.has(groupSize) === false) {
15 | map.set(groupSize, []);
16 | }
17 |
18 | //masukan index(index) ke array temp tadi
19 | map.get(groupSize).push(index);
20 |
21 | //cek terlebih dahulu jika size array sama dengan value groupsize
22 | if (map.get(groupSize).length === groupSize) {
23 | //masukan temp array tadi ke result
24 | let arr = map.get(groupSize)
25 | result.push(arr);
26 | //hapus key sebelumnya
27 | map.delete(groupSize);
28 | }
29 | }
30 |
31 | return result;
32 | };
--------------------------------------------------------------------------------
/1282-group-the-people-given-the-group-size-they-belong-to/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1323-maximum-69-number/1323-maximum-69-number.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number} num
3 | * @return {number}
4 | */
5 | var maximum69Number = function (num) {
6 | let curMax = num;
7 |
8 | let length = num.toString().split("").length
9 |
10 | for (let i = 0; i < length; i++) {
11 | let temp = num.toString().split("")
12 | if(temp[i] === "6") {
13 | temp[i] = '9'
14 | } else {
15 | temp[i] = '6'
16 | }
17 |
18 | curMax = Math.max(curMax, temp.join(""))
19 | }
20 |
21 | return curMax
22 | };
--------------------------------------------------------------------------------
/1323-maximum-69-number/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1343-number-of-sub-arrays-of-size-k-and-average-greater-than-or-equal-to-threshold/1343-number-of-sub-arrays-of-size-k-and-average-greater-than-or-equal-to-threshold.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} arr
3 | * @param {number} k
4 | * @param {number} threshold
5 | * @return {number}
6 | */
7 | var numOfSubarrays = function(arr, k, threshold) {
8 | let res = 0;
9 | let windowSum = 0;
10 |
11 | for (let i = 0; i < k; i++) {
12 | windowSum += arr[i];
13 | }
14 |
15 | if (windowSum / k >= threshold) {
16 | res++;
17 | }
18 |
19 | for (let i = k; i < arr.length; i++) {
20 | let nextWindow = arr[i]
21 | let prevWindow = arr[i-k]
22 | windowSum += nextWindow - prevWindow;
23 | if (windowSum / k >= threshold) {
24 | res++;
25 | }
26 | }
27 |
28 | return res;
29 |
30 | };
--------------------------------------------------------------------------------
/1343-number-of-sub-arrays-of-size-k-and-average-greater-than-or-equal-to-threshold/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1351-count-negative-numbers-in-a-sorted-matrix/1351-count-negative-numbers-in-a-sorted-matrix.js:
--------------------------------------------------------------------------------
1 | function binarySearch(arr) {
2 | let left = 0;
3 | let right = arr.length - 1;
4 |
5 | while (left <= right) {
6 | let mid = Math.floor((left + right) / 2);
7 |
8 | if (arr[mid] < 0) {
9 | right = mid - 1;
10 | } else {
11 | left = mid + 1;
12 | }
13 | }
14 |
15 | return left;
16 | }
17 |
18 | var countNegatives = function (grid) {
19 | let res = 0;
20 | for (let i = 0; i < grid.length; i++) {
21 | res += grid[i].length - binarySearch(grid[i]);
22 | }
23 |
24 | return res;
25 | };
26 |
--------------------------------------------------------------------------------
/1351-count-negative-numbers-in-a-sorted-matrix/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1351-count-negative-numbers-in-a-sorted-matrix/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given a m x n
matrix grid
which is sorted in non-increasing order both row-wise and column-wise, return the number of negative numbers in grid
.
2 |
3 |
4 |
Example 1:
5 |
6 |
Input: grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]
7 | Output: 8
8 | Explanation: There are 8 negatives number in the matrix.
9 |
10 |
11 |
Example 2:
12 |
13 |
Input: grid = [[3,2],[1,0]]
14 | Output: 0
15 |
16 |
17 |
18 |
Constraints:
19 |
20 |
21 | m == grid.length
22 | n == grid[i].length
23 | 1 <= m, n <= 100
24 | -100 <= grid[i][j] <= 100
25 |
26 |
27 |
28 |
Follow up: Could you find an
O(n + m)
solution?
--------------------------------------------------------------------------------
/1357-apply-discount-every-n-orders/1357-apply-discount-every-n-orders.js:
--------------------------------------------------------------------------------
1 | class Cashier {
2 | constructor(n, discount, products, prices) {
3 | this.map = new Map();
4 | for (let i = 0; i < products.length; i++) {
5 | this.map.set(products[i], prices[i]);
6 | }
7 |
8 | this.n = n;
9 | this.discount = discount;
10 | this.count = 0;
11 | }
12 |
13 | getBill(product, amount) {
14 | this.total = 0;
15 | this.barang = 0;
16 | for (let i = 0; i < product.length; i++) {
17 | let jumlah_barang = amount[i];
18 | this.barang++;
19 | this.total += this.map.get(product[i]) * jumlah_barang;
20 | }
21 |
22 | this.count++;
23 | if (this.count === this.n) {
24 | this.count = 0;
25 | return this.total * ((100 - this.discount) / 100);
26 | }
27 |
28 | return this.total;
29 | }
30 | }
--------------------------------------------------------------------------------
/1357-apply-discount-every-n-orders/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1365-how-many-numbers-are-smaller-than-the-current-number/1365-how-many-numbers-are-smaller-than-the-current-number.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number[]}
4 | */
5 | var smallerNumbersThanCurrent = function(nums) {
6 | let res = []
7 |
8 | for (let i = 0; i < nums.length; i++) {
9 | let count = 0
10 | for (let j = 0; j < nums.length; j++) {
11 | if(nums[j] < nums[i]) count++
12 | }
13 | res.push(count)
14 |
15 | }
16 |
17 | return res
18 | };
--------------------------------------------------------------------------------
/1365-how-many-numbers-are-smaller-than-the-current-number/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1381-design-a-stack-with-increment-operation/1381-design-a-stack-with-increment-operation.js:
--------------------------------------------------------------------------------
1 | class CustomStack {
2 | constructor(maxSize) {
3 | this.stack = []
4 | this.count = 0
5 | this.maxSize = maxSize
6 | }
7 |
8 | push(element) {
9 | if(this.count !== this.maxSize) {
10 | this.stack.push(element)
11 | this.count = this.count + 1
12 | }
13 | }
14 |
15 | pop() {
16 | if (this.isEmpty()) {
17 | return -1;
18 | } else {
19 | this.count--
20 | return this.stack.pop();
21 | }
22 | }
23 |
24 | isEmpty() {
25 | return this.stack.length === 0;
26 | }
27 |
28 | peek() {
29 | return this.stack[this.stack.length - 1];
30 | }
31 |
32 | increment(k, val){
33 | for (let i = 0; i < Math.min(k, this.count); i++) {
34 | this.stack[i] = this.stack[i] + val
35 | }
36 | }
37 |
38 | }
39 |
40 | /**
41 | * Your CustomStack object will be instantiated and called as such:
42 | * var obj = new CustomStack(maxSize)
43 | * obj.push(x)
44 | * var param_2 = obj.pop()
45 | * obj.increment(k,val)
46 | */
--------------------------------------------------------------------------------
/1381-design-a-stack-with-increment-operation/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1393-capital-gain-loss/1393-capital-gain-loss.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | SELECT stock_name, SUM(CASE WHEN operation = "Buy" THEN price * -1 ELSE price END) as 'capital_gain_loss'
4 | FROM Stocks
5 | GROUP BY stock_name
6 | ORDER BY capital_gain_loss DESC
--------------------------------------------------------------------------------
/1393-capital-gain-loss/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1394-find-lucky-integer-in-an-array/1394-find-lucky-integer-in-an-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} arr
3 | * @return {number}
4 | */
5 | var findLucky = function(arr) {
6 | const frequency = {};
7 |
8 | // Menghitung frekuensi setiap elemen dalam array
9 | for (let i = 0; i < arr.length; i++) {
10 | const num = arr[i];
11 | if (frequency[num]) {
12 | frequency[num]++;
13 | } else {
14 | frequency[num] = 1;
15 | }
16 | }
17 |
18 | frequency
19 |
20 | // Mencari angka beruntung (lucky number)
21 | let luckyNumber = -1;
22 | for (const key in frequency) {
23 | if (parseInt(key) === frequency[key]) {
24 | luckyNumber = Math.max(luckyNumber, parseInt(key));
25 | }
26 | }
27 |
28 | return luckyNumber;
29 | };
--------------------------------------------------------------------------------
/1394-find-lucky-integer-in-an-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1394-find-lucky-integer-in-an-array/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given an array of integers arr
, a lucky integer is an integer that has a frequency in the array equal to its value.
2 |
3 |
Return the largest lucky integer in the array. If there is no lucky integer return -1
.
4 |
5 |
6 |
Example 1:
7 |
8 |
Input: arr = [2,2,3,4]
9 | Output: 2
10 | Explanation: The only lucky number in the array is 2 because frequency[2] == 2.
11 |
12 |
13 |
Example 2:
14 |
15 |
Input: arr = [1,2,2,3,3,3]
16 | Output: 3
17 | Explanation: 1, 2 and 3 are all lucky numbers, return the largest of them.
18 |
19 |
20 |
Example 3:
21 |
22 |
Input: arr = [2,2,2,3,3]
23 | Output: -1
24 | Explanation: There are no lucky numbers in the array.
25 |
26 |
27 |
28 |
Constraints:
29 |
30 |
31 | 1 <= arr.length <= 500
32 | 1 <= arr[i] <= 500
33 |
34 |
--------------------------------------------------------------------------------
/1407-top-travellers/1407-top-travellers.sql:
--------------------------------------------------------------------------------
1 | SELECT u.name, sum(IF(distance is NULL,0,distance)) as travelled_distance
2 | FROM Users u
3 | LEFT JOIN Rides r ON u.id = r.user_id
4 | GROUP BY u.id
5 | ORDER BY travelled_distance DESC, u.name ASC;
6 |
--------------------------------------------------------------------------------
/1407-top-travellers/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1436-destination-city/1436-destination-city.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string[][]} paths
3 | * @return {string}
4 | */
5 | var destCity = function (paths) {
6 | let set = new Set();
7 |
8 | paths.forEach((path) => {
9 | set.add(path[1]);
10 | });
11 |
12 | paths.forEach((path) => {
13 | if(set.has(path[0])) set.delete(path[0])
14 | })
15 |
16 | let res = ''
17 | set.forEach((element)=>{
18 | res = element
19 | })
20 |
21 | return res
22 | };
--------------------------------------------------------------------------------
/1436-destination-city/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1484-group-sold-products-by-the-date/1484-group-sold-products-by-the-date.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 | SELECT sell_date, count(DISTINCT(product)) as num_sold,
3 | GROUP_CONCAT(DISTINCT product ORDER BY product ASC SEPARATOR ',') AS products
4 | FROM Activities
5 | GROUP BY sell_date
6 | ORDER BY sell_date ASC
--------------------------------------------------------------------------------
/1484-group-sold-products-by-the-date/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1496-path-crossing/1496-path-crossing.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} path
3 | * @return {boolean}
4 | */
5 | var isPathCrossing = function (path) {
6 | let arr = path.split("");
7 | let map = {};
8 |
9 | let x = 0;
10 | let y = 0;
11 | map[`${x},${y}`] = true;
12 |
13 | for (let i = 0; i < arr.length; i++) {
14 | const element = arr[i];
15 | if (element === "N") {
16 | y++;
17 | } else if (element === "E") {
18 | x++;
19 | } else if (element === "S") {
20 | y--;
21 | } else if (element === "W") {
22 | x--;
23 | }
24 |
25 | let newCoor = `${x},${y}`;
26 | newCoor;
27 |
28 | //pengecekan
29 | if (map.hasOwnProperty(newCoor)) {
30 | return true;
31 | } else {
32 | map[newCoor] = true;
33 | }
34 | }
35 |
36 | return false;
37 | };
--------------------------------------------------------------------------------
/1496-path-crossing/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1502-can-make-arithmetic-progression-from-sequence/1502-can-make-arithmetic-progression-from-sequence.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} arr
3 | * @return {boolean}
4 | */
5 | var canMakeArithmeticProgression = function(arr) {
6 | let sorted = arr.sort((a,b) => a-b)
7 | let arimatika = true
8 | let op = sorted[1] - sorted[0]
9 | for(let i = 0; i < sorted.length - 1; i++){
10 | if(sorted[i] + op !== sorted[i+1]){
11 | arimatika = false
12 | break
13 | }
14 | }
15 |
16 | return arimatika
17 | };
--------------------------------------------------------------------------------
/1502-can-make-arithmetic-progression-from-sequence/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1502-can-make-arithmetic-progression-from-sequence/README.md:
--------------------------------------------------------------------------------
1 | Easy
A sequence of numbers is called an arithmetic progression if the difference between any two consecutive elements is the same.
2 |
3 |
Given an array of numbers arr
, return true
if the array can be rearranged to form an arithmetic progression. Otherwise, return false
.
4 |
5 |
6 |
Example 1:
7 |
8 |
Input: arr = [3,5,1]
9 | Output: true
10 | Explanation: We can reorder the elements as [1,3,5] or [5,3,1] with differences 2 and -2 respectively, between each consecutive elements.
11 |
12 |
13 |
Example 2:
14 |
15 |
Input: arr = [1,2,4]
16 | Output: false
17 | Explanation: There is no way to reorder the elements to obtain an arithmetic progression.
18 |
19 |
20 |
21 |
Constraints:
22 |
23 |
24 | 2 <= arr.length <= 1000
25 | -106 <= arr[i] <= 106
26 |
27 |
--------------------------------------------------------------------------------
/1512-number-of-good-pairs/1512-number-of-good-pairs.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number}
4 | */
5 | function numIdenticalPairs(nums) {
6 | let i=0
7 | let j=i+1
8 | let count=0
9 | nums.sort()
10 | while(i1512. Number of Good PairsEasy
Given an array of integers nums
, return the number of good pairs.
2 |
3 |
A pair (i, j)
is called good if nums[i] == nums[j]
and i
< j
.
4 |
5 |
6 |
Example 1:
7 |
8 |
Input: nums = [1,2,3,1,1,3]
9 | Output: 4
10 | Explanation: There are 4 good pairs (0,3), (0,4), (3,4), (2,5) 0-indexed.
11 |
12 |
13 |
Example 2:
14 |
15 |
Input: nums = [1,1,1,1]
16 | Output: 6
17 | Explanation: Each pair in the array are good.
18 |
19 |
20 |
Example 3:
21 |
22 |
Input: nums = [1,2,3]
23 | Output: 0
24 |
25 |
26 |
27 |
Constraints:
28 |
29 |
30 | 1 <= nums.length <= 100
31 | 1 <= nums[i] <= 100
32 |
33 |
--------------------------------------------------------------------------------
/1528-shuffle-string/1528-shuffle-string.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} s
3 | * @param {number[]} indices
4 | * @return {string}
5 | */
6 | var restoreString = function(s, indices) {
7 | var str = new Array(indices.length);
8 |
9 | for (let index = 0; index < indices.length; index++) {
10 | str[indices[index]] = s[index];
11 | }
12 |
13 | return str.join('')
14 | };
--------------------------------------------------------------------------------
/1528-shuffle-string/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1541-top-travellers/1541-top-travellers.sql:
--------------------------------------------------------------------------------
1 | SELECT u.name, sum(IF(distance is NULL,0,distance)) as travelled_distance
2 | FROM Users u
3 | LEFT JOIN Rides r ON u.id = r.user_id
4 | GROUP BY u.id
5 | ORDER BY travelled_distance DESC, u.name ASC;
6 |
--------------------------------------------------------------------------------
/1572-matrix-diagonal-sum/1572-matrix-diagonal-sum.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[][]} mat
3 | * @return {number}
4 | */
5 | var diagonalSum = function(mat) {
6 | let total = mat.length
7 |
8 | let primaryDiagonal = 0
9 | let secondaryDiagonal = 0
10 | for (let i = 0; i < total; i++) {
11 | const element = mat[i][i];
12 | primaryDiagonal = primaryDiagonal + element
13 | }
14 |
15 | if(total % 2 === 1){
16 | let temp = total
17 | for (let j = 0; j < total; j++) {
18 | const element = mat[j][temp-1];
19 | element
20 | if(j !== temp-1){
21 | secondaryDiagonal = secondaryDiagonal + element
22 | }
23 | temp--
24 | }
25 | } else {
26 | let temp = total
27 | for (let j = 0; j < total; j++) {
28 | const element = mat[j][temp-1];
29 | temp--
30 | secondaryDiagonal = secondaryDiagonal + element
31 | }
32 | }
33 |
34 | return primaryDiagonal + secondaryDiagonal
35 | };
--------------------------------------------------------------------------------
/1572-matrix-diagonal-sum/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1587-bank-account-summary-ii/1587-bank-account-summary-ii.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | SELECT u.name, SUM(amount) as 'balance'
4 | FROM Transactions t
5 | JOIN Users u ON t.account = u.account
6 | GROUP BY t.account
7 | HAVING balance > 10000
--------------------------------------------------------------------------------
/1587-bank-account-summary-ii/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1588-sum-of-all-odd-length-subarrays/1588-sum-of-all-odd-length-subarrays.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} arr
3 | * @return {number}
4 | */
5 |
6 | var sumOddLengthSubarrays = function(arr) {
7 | const n = arr.length;
8 | let sum = 0;
9 |
10 | if (n === 1) return arr[0];
11 |
12 | // Turn arr into a prefix sum array
13 | for (let i = 1; i < n; i++)
14 | arr[i] += arr[i-1];
15 |
16 | let numOfSlidingWindows = Math.ceil(n/2);
17 |
18 | for (let i = 0; i < numOfSlidingWindows; i++) {
19 | for (let j = i*2; j < n; j++) {
20 | if (j-(i*2)-1 < 0) {
21 | sum += arr[j];
22 | }
23 | else sum += arr[j] - arr[j-(i*2)-1]
24 | }
25 | }
26 | return sum;
27 | };
28 |
--------------------------------------------------------------------------------
/1588-sum-of-all-odd-length-subarrays/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1598-crawler-log-folder/1598-crawler-log-folder.js:
--------------------------------------------------------------------------------
1 | class Stack {
2 | constructor() {
3 | this.stack = [];
4 | }
5 |
6 | push(item) {
7 | this.stack.push(item);
8 | }
9 |
10 | pop() {
11 | if (this.isEmpty()) return "Stack Kosong";
12 | return this.stack.pop();
13 | }
14 |
15 | isEmpty() {
16 | return this.stack.length === 0;
17 | }
18 |
19 | peek() {
20 | return this.stack[this.stack.length - 1];
21 | }
22 |
23 | size(){
24 | return this.stack.length
25 | }
26 | }
27 |
28 | var minOperations = function (logs) {
29 | let stack = new Stack();
30 |
31 | const operations = {
32 | "../": () => {
33 | stack.pop();
34 | },
35 | "./": () => {
36 | stack.peek();
37 | },
38 | default: (element) => stack.push(element),
39 | };
40 |
41 | logs.forEach((element) => {
42 | const action = operations[element] || operations.default;
43 | action(element);
44 | });
45 |
46 | return stack.size()
47 | };
48 |
--------------------------------------------------------------------------------
/1598-crawler-log-folder/1598-crawler-log-folder.py:
--------------------------------------------------------------------------------
1 | class Solution:
2 | def minOperations(self, logs: List[str]) -> int:
3 | stack=[]
4 | for log in logs:
5 | if log == "./":
6 | continue
7 | elif stack and log == "../":
8 | stack.pop()
9 | elif log != '../':
10 | stack.append(log)
11 | return len(stack)
--------------------------------------------------------------------------------
/1598-crawler-log-folder/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1603-design-parking-system/1603-design-parking-system.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number} big
3 | * @param {number} medium
4 | * @param {number} small
5 | */
6 | var ParkingSystem = function (big, medium, small) {
7 | this.big = big
8 | this.medium = medium
9 | this.small = small
10 | };
11 |
12 | /**
13 | * @param {number} carType
14 | * @return {boolean}
15 | */
16 | ParkingSystem.prototype.addCar = function(carType) {
17 | switch (carType) {
18 | case 1:
19 | return --this.big >= 0;
20 | case 2:
21 | return --this.medium >= 0;
22 | case 3:
23 | return --this.small >= 0;
24 | default:
25 | break;
26 | }
27 | };
--------------------------------------------------------------------------------
/1603-design-parking-system/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1603-running-sum-of-1d-array/1603-running-sum-of-1d-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number[]}
4 | */
5 | var runningSum = function(nums) {
6 | let sums = 0;
7 | let retSums = [];
8 | for(let i of nums) {
9 | sums += i;
10 | retSums.push(sums);
11 | }
12 | return retSums;
13 | }
--------------------------------------------------------------------------------
/1603-running-sum-of-1d-array/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given an array nums
. We define a running sum of an array as runningSum[i] = sum(nums[0]…nums[i])
.
2 |
3 | Return the running sum of nums
.
4 |
5 |
6 | Example 1:
7 |
8 |
9 | Input: nums = [1,2,3,4]
10 | Output: [1,3,6,10]
11 | Explanation: Running sum is obtained as follows: [1, 1+2, 1+2+3, 1+2+3+4].
12 |
13 | Example 2:
14 |
15 |
16 | Input: nums = [1,1,1,1,1]
17 | Output: [1,2,3,4,5]
18 | Explanation: Running sum is obtained as follows: [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1].
19 |
20 | Example 3:
21 |
22 |
23 | Input: nums = [3,1,2,10,1]
24 | Output: [3,4,6,16,17]
25 |
26 |
27 |
28 | Constraints:
29 |
30 |
31 | 1 <= nums.length <= 1000
32 | -10^6 <= nums[i] <= 10^6
33 |
--------------------------------------------------------------------------------
/1614-maximum-nesting-depth-of-the-parentheses/1614-maximum-nesting-depth-of-the-parentheses.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} s
3 | * @return {number}
4 | */
5 | var maxDepth = function(s) {
6 | let stack = []
7 |
8 | let max = 0
9 | let counter = 0
10 | s.split("").forEach((element) => {
11 | if(element === "("){
12 | counter++
13 | max = Math.max(max, counter)
14 | } else if (element === ")"){
15 | counter--
16 | }
17 | })
18 |
19 | return max
20 | };
--------------------------------------------------------------------------------
/1614-maximum-nesting-depth-of-the-parentheses/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1624-largest-substring-between-two-equal-characters/1624-largest-substring-between-two-equal-characters.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} s
3 | * @return {number}
4 | */
5 | var maxLengthBetweenEqualCharacters = function(s) {
6 | let array = s.split('')
7 |
8 | let temp = []
9 | let res = []
10 | let max = 0
11 | for (let i = 0; i < array.length; i++) {
12 | for (let j = i+1; j < array.length; j++) {
13 | if(array[i] === array[j]){
14 | temp.push(i, j)
15 | }
16 | }
17 | }
18 |
19 | for (let i = 0; i < temp.length; i++) {
20 | let element = temp[i]
21 | let element2 = temp[i+1]
22 | let sum = element2 - element
23 | if(sum > max){
24 | max = sum
25 | }
26 | }
27 |
28 | if(temp.length && res.length >= 0){
29 | return max-1
30 | } else if (temp.length && res.length === 0){
31 | return temp.length
32 | } else {
33 | return -1
34 | }
35 | };
--------------------------------------------------------------------------------
/1624-largest-substring-between-two-equal-characters/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1624-largest-substring-between-two-equal-characters/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given a string s
, return the length of the longest substring between two equal characters, excluding the two characters. If there is no such substring return -1
.
2 |
3 |
A substring is a contiguous sequence of characters within a string.
4 |
5 |
6 |
Example 1:
7 |
8 |
Input: s = "aa"
9 | Output: 0
10 | Explanation: The optimal substring here is an empty substring between the two 'a's
.
11 |
12 |
Example 2:
13 |
14 |
Input: s = "abca"
15 | Output: 2
16 | Explanation: The optimal substring here is "bc".
17 |
18 |
19 |
Example 3:
20 |
21 |
Input: s = "cbzxy"
22 | Output: -1
23 | Explanation: There are no characters that appear twice in s.
24 |
25 |
26 |
27 |
Constraints:
28 |
29 |
30 | 1 <= s.length <= 300
31 | s
contains only lowercase English letters.
32 |
33 |
--------------------------------------------------------------------------------
/1625-group-sold-products-by-the-date/1625-group-sold-products-by-the-date.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 | SELECT sell_date, count(DISTINCT(product)) as num_sold,
3 | GROUP_CONCAT(DISTINCT product ORDER BY product ASC SEPARATOR ',') AS products
4 | FROM Activities
5 | GROUP BY sell_date
6 | ORDER BY sell_date ASC
--------------------------------------------------------------------------------
/1630-arithmetic-subarrays/1630-arithmetic-subarrays.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @param {number[]} l
4 | * @param {number[]} r
5 | * @return {boolean[]}
6 | */
7 | var checkArithmeticSubarrays = function(nums, l, r) {
8 | let res = [];
9 |
10 | for (let i = 0; i < l.length; i++) {
11 | let temp = nums.slice(l[i], r[i] + 1);
12 | let sorted = temp.slice().sort((a, b) => a - b);
13 | let op = sorted[1] - sorted[0];
14 | let isArithmetic = true;
15 |
16 | for (let j = 0; j < sorted.length - 1; j++) {
17 | if (sorted[j] + op !== sorted[j + 1]) {
18 | isArithmetic = false;
19 | break;
20 | }
21 | }
22 |
23 | res.push(isArithmetic);
24 | }
25 |
26 | return res;
27 | };
--------------------------------------------------------------------------------
/1630-arithmetic-subarrays/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1633-percentage-of-users-attended-a-contest/1633-percentage-of-users-attended-a-contest.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | SELECT r.contest_id,
4 | ROUND((COUNT(r.user_id) * 100 / (SELECT COUNT(user_id) FROM Users)), 2) as percentage
5 | FROM Users u
6 | JOIN Register r ON u.user_id = r.user_id
7 | GROUP BY r.contest_id
8 | ORDER BY percentage DESC, contest_id;
9 |
--------------------------------------------------------------------------------
/1633-percentage-of-users-attended-a-contest/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1636-sort-array-by-increasing-frequency/1636-sort-array-by-increasing-frequency.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number[]}
4 | */
5 | var frequencySort = function(nums) {
6 | let res = []
7 | let map = new Map()
8 | nums.forEach((element) => {
9 | map.set(element, (map.get(element) || 0) + 1)
10 | })
11 | map
12 |
13 | let arr = Array.from([...map.entries()]).sort((a, b) => {
14 | // Mengurutkan berdasarkan nilai index 1
15 | if (a[1] !== b[1]) {
16 | return a[1] - b[1];
17 | }
18 | // Jika nilai index 1 sama, mengurutkan berdasarkan nilai index 0
19 | return b[0] - a[0];
20 | });
21 |
22 | for(const [key, value] of arr){
23 | for (let i = 0; i < value; i++) {
24 | res.push(key)
25 | }
26 | }
27 |
28 | return res
29 | };
--------------------------------------------------------------------------------
/1636-sort-array-by-increasing-frequency/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1636-sort-array-by-increasing-frequency/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given an array of integers nums
, sort the array in increasing order based on the frequency of the values. If multiple values have the same frequency, sort them in decreasing order.
2 |
3 |
Return the sorted array.
4 |
5 |
6 |
Example 1:
7 |
8 |
Input: nums = [1,1,2,2,2,3]
9 | Output: [3,1,1,2,2,2]
10 | Explanation: '3' has a frequency of 1, '1' has a frequency of 2, and '2' has a frequency of 3.
11 |
12 |
13 |
Example 2:
14 |
15 |
Input: nums = [2,3,1,3,2]
16 | Output: [1,3,3,2,2]
17 | Explanation: '2' and '3' both have a frequency of 2, so they are sorted in decreasing order.
18 |
19 |
20 |
Example 3:
21 |
22 |
Input: nums = [-1,1,-6,4,5,-6,1,4,1]
23 | Output: [5,-1,4,4,-6,-6,1,1,1]
24 |
25 |
26 |
Constraints:
27 |
28 |
29 | 1 <= nums.length <= 100
30 | -100 <= nums[i] <= 100
31 |
32 |
--------------------------------------------------------------------------------
/1672-richest-customer-wealth/1672-richest-customer-wealth.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[][]} accounts
3 | * @return {number}
4 | */
5 | var maximumWealth = function(accounts) {
6 | let highest = 0;
7 |
8 | accounts.forEach((account) => {
9 | let sum = account.reduce((x,y) => {
10 | return x + y
11 | }, 0);
12 | if ( highest < sum ) highest = sum;
13 | })
14 |
15 | return highest;
16 | };
--------------------------------------------------------------------------------
/1672-richest-customer-wealth/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1683-invalid-tweets/1683-invalid-tweets.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | SELECT tweet_id
4 | FROM Tweets
5 | WHERE LENGTH(content) > 15
6 |
--------------------------------------------------------------------------------
/1683-invalid-tweets/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1693-daily-leads-and-partners/1693-daily-leads-and-partners.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | SELECT date_id, make_name, COUNT(DISTINCT lead_id) as 'unique_leads', COUNT(DISTINCT partner_id) as 'unique_partners'
4 | FROM DailySales
5 | GROUP BY date_id, make_name
--------------------------------------------------------------------------------
/1693-daily-leads-and-partners/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1700-number-of-students-unable-to-eat-lunch/1700-number-of-students-unable-to-eat-lunch.js:
--------------------------------------------------------------------------------
1 | const countStudents = function(students, sandwiches) {
2 | const queue = new Queue();
3 |
4 | for (const student of students) {
5 | queue.enqueue(student);
6 | }
7 |
8 | let count = 0;
9 | while (!queue.isEmpty() && count < queue.size()) {
10 | if (queue.front() === sandwiches[0]) {
11 | count = 0;
12 | queue.dequeue();
13 | sandwiches.shift();
14 | } else {
15 | count++;
16 | queue.enqueue(queue.dequeue());
17 | }
18 | }
19 |
20 | return queue.size();
21 | };
22 |
--------------------------------------------------------------------------------
/1700-number-of-students-unable-to-eat-lunch/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1729-find-followers-count/1729-find-followers-count.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 | SELECT user_id, COUNT(DISTINCT follower_id) as followers_count
3 | FROM Followers
4 | GROUP BY user_id
--------------------------------------------------------------------------------
/1729-find-followers-count/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1732-find-the-highest-altitude/1732-find-the-highest-altitude.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} gain
3 | * @return {number}
4 | */
5 | var largestAltitude = function(gain) {
6 | let arr = []
7 | arr.push(0, gain[0])
8 |
9 | for (let i = 0; i < gain.length-1; i++) {
10 | let sum = arr[i+1] + gain[i+1]
11 | arr.push(sum)
12 | }
13 |
14 | let alt = arr.sort((a, b) => b-a)
15 |
16 | return alt[0]
17 | };
--------------------------------------------------------------------------------
/1732-find-the-highest-altitude/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1732-find-the-highest-altitude/README.md:
--------------------------------------------------------------------------------
1 | Easy
There is a biker going on a road trip. The road trip consists of n + 1
points at different altitudes. The biker starts his trip on point 0
with altitude equal 0
.
2 |
3 |
You are given an integer array gain
of length n
where gain[i]
is the net gain in altitude between points i
and i + 1
for all (0 <= i < n)
. Return the highest altitude of a point.
4 |
5 |
6 |
Example 1:
7 |
8 |
Input: gain = [-5,1,5,0,-7]
9 | Output: 1
10 | Explanation: The altitudes are [0,-5,-4,1,1,-6]. The highest is 1.
11 |
12 |
13 |
Example 2:
14 |
15 |
Input: gain = [-4,-3,-2,-1,4,3,2]
16 | Output: 0
17 | Explanation: The altitudes are [0,-4,-7,-9,-10,-6,-3,-1]. The highest is 0.
18 |
19 |
20 |
21 |
Constraints:
22 |
23 |
24 | n == gain.length
25 | 1 <= n <= 100
26 | -100 <= gain[i] <= 100
27 |
28 |
--------------------------------------------------------------------------------
/1737-maximum-nesting-depth-of-the-parentheses/1737-maximum-nesting-depth-of-the-parentheses.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} s
3 | * @return {number}
4 | */
5 | var maxDepth = function(s) {
6 | let stack = []
7 |
8 | let max = 0
9 | let counter = 0
10 | s.split("").forEach((element) => {
11 | if(element === "("){
12 | counter++
13 | max = Math.max(max, counter)
14 | } else if (element === ")"){
15 | counter--
16 | }
17 | })
18 |
19 | return max
20 | };
--------------------------------------------------------------------------------
/1748-sum-of-unique-elements/1748-sum-of-unique-elements.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number}
4 | */
5 | var sumOfUnique = function(nums) {
6 | let map = new Map()
7 | let res = 0
8 | nums.forEach((element) => {
9 | map.set(element, (map.get(element) || 0) + 1)
10 | })
11 | map.forEach((key, value) => {
12 | if(key == 1){
13 | res += value
14 | }
15 | })
16 | return res
17 | };
--------------------------------------------------------------------------------
/1748-sum-of-unique-elements/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1748-sum-of-unique-elements/README.md:
--------------------------------------------------------------------------------
1 | Easy
You are given an integer array nums
. The unique elements of an array are the elements that appear exactly once in the array.
2 |
3 |
Return the sum of all the unique elements of nums
.
4 |
5 |
6 |
Example 1:
7 |
8 |
Input: nums = [1,2,3,2]
9 | Output: 4
10 | Explanation: The unique elements are [1,3], and the sum is 4.
11 |
12 |
13 |
Example 2:
14 |
15 |
Input: nums = [1,1,1,1,1]
16 | Output: 0
17 | Explanation: There are no unique elements, and the sum is 0.
18 |
19 |
20 |
Example 3:
21 |
22 |
Input: nums = [1,2,3,4,5]
23 | Output: 15
24 | Explanation: The unique elements are [1,2,3,4,5], and the sum is 15.
25 |
26 |
27 |
28 |
Constraints:
29 |
30 |
31 | 1 <= nums.length <= 100
32 | 1 <= nums[i] <= 100
33 |
34 |
--------------------------------------------------------------------------------
/1768-merge-strings-alternately/1768-merge-strings-alternately.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} word1
3 | * @param {string} word2
4 | * @return {string}
5 | */
6 | var mergeAlternately = function(word1, word2) {
7 | let res = ''
8 | for (let i = 0; i < Math.max(word1.length, word2.length); i++) {
9 | if(word1[i]) res+= word1[i]
10 | if(word2[i]) res+= word2[i]
11 | }
12 | return res
13 | };
--------------------------------------------------------------------------------
/1768-merge-strings-alternately/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1773-count-items-matching-a-rule/1773-count-items-matching-a-rule.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string[][]} items
3 | * @param {string} ruleKey
4 | * @param {string} ruleValue
5 | * @return {number}
6 | */
7 | var countMatches = function (items, ruleKey, ruleValue) {
8 | let find = 0;
9 | if (ruleKey === "type") find = 0;
10 | if (ruleKey === "color") find = 1;
11 | if (ruleKey === "name") find = 2;
12 |
13 | let arr = items.map((element) => {
14 | return element[find]
15 | }).filter((elemen) => elemen === ruleValue);
16 |
17 | return arr.length;
18 | };
--------------------------------------------------------------------------------
/1773-count-items-matching-a-rule/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1816-truncate-sentence/1816-truncate-sentence.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} s
3 | * @param {number} k
4 | * @return {string}
5 | */
6 | var truncateSentence = function(s, k) {
7 | let split = s.split(' ')
8 | let res = []
9 | for (let index = 0; index < k; index++) {
10 | res.push(split[index])
11 | }
12 |
13 | return res.join(' ')
14 | };
--------------------------------------------------------------------------------
/1816-truncate-sentence/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1817-finding-the-users-active-minutes/1817-finding-the-users-active-minutes.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[][]} logs
3 | * @param {number} k
4 | * @return {number[]}
5 | */
6 | var findingUsersActiveMinutes = function (logs, k) {
7 | let map = new Map();
8 |
9 | for (const [user, time] of logs) {
10 | //jika tidak ada user maka buat key baru dan value berupa set
11 | if (map.has(user) === false) {
12 | map.set(user, new Set());
13 | }
14 | //tambahkan value berupa set yang berisi time
15 | let set = map.get(user)
16 | set.add(time);
17 | }
18 |
19 |
20 | //tambah 0 ke array sesuai k
21 | let arr = new Array(k).fill(0);
22 |
23 | for (const actions of map.values()) {
24 | arr[actions.size - 1] = arr[actions.size - 1]+1;
25 | }
26 |
27 | return arr;
28 | };
--------------------------------------------------------------------------------
/1817-finding-the-users-active-minutes/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1865-finding-pairs-with-a-certain-sum/1865-finding-pairs-with-a-certain-sum.js:
--------------------------------------------------------------------------------
1 | var FindSumPairs = function (nums1, nums2) {
2 | this.nums1 = nums1;
3 | this.nums2 = nums2;
4 | this.map = new Map();
5 | this.map2 = new Map();
6 |
7 | nums1.forEach((num1) => {
8 | this.map.set(num1, (this.map.get(num1) || 0) + 1);
9 | });
10 | nums2.forEach((num2) => {
11 | this.map2.set(num2, (this.map2.get(num2) || 0) + 1);
12 | });
13 | };
14 |
15 | FindSumPairs.prototype.add = function (index, val) {
16 | var x = this.nums2[index];
17 | this.map2.set(x, this.map2.get(x) - 1);
18 | this.nums2[index] += val;
19 | var newX = x + val;
20 | this.map2.set(newX, (this.map2.get(newX) || 0) + 1);
21 | };
22 |
23 | FindSumPairs.prototype.count = function (tot) {
24 | var count = 0;
25 | for (var [key, value] of this.map) {
26 | var diff = tot - key;
27 | var value2 = this.map2.get(diff);
28 | if (value2 !== undefined) {
29 | count += value * value2;
30 | }
31 | }
32 | return count;
33 | };
--------------------------------------------------------------------------------
/1865-finding-pairs-with-a-certain-sum/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1873-calculate-special-bonus/1873-calculate-special-bonus.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | select employee_id,
4 | CASE
5 | WHEN employee_id%2 != 0 AND name NOT LIKE 'M%' THEN salary
6 | ELSE 0
7 | END as bonus
8 | FROM employees
9 | ORDER BY employee_id;
--------------------------------------------------------------------------------
/1876-substrings-of-size-three-with-distinct-characters/1876-substrings-of-size-three-with-distinct-characters.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} s
3 | * @return {number}
4 | */
5 | var countGoodSubstrings = function (s) {
6 | return Array.from({ length: s.length - 2 }, (_, l) => new Set(`${s[l]}${s[l + 1]}${s[l + 2]}`).size === 3).filter(Boolean).length;
7 | };
--------------------------------------------------------------------------------
/1876-substrings-of-size-three-with-distinct-characters/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1877-find-followers-count/1877-find-followers-count.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 | SELECT user_id, COUNT(DISTINCT follower_id) as followers_count
3 | FROM Followers
4 | GROUP BY user_id
--------------------------------------------------------------------------------
/1903-largest-odd-number-in-string/1903-largest-odd-number-in-string.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} num
3 | * @return {string}
4 | */
5 | var largestOddNumber = function(num) {
6 | num = num.split("");
7 | for(let i = num.length - 1; i >= 0; i--){
8 | if(num[i] % 2 == 0){
9 | num.pop();
10 | } else {
11 | break;
12 | }
13 | }
14 | return num.join("");
15 | };
--------------------------------------------------------------------------------
/1903-largest-odd-number-in-string/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1920-build-array-from-permutation/1920-build-array-from-permutation.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number[]}
4 | */
5 | var buildArray = function(nums) {
6 | let array = [];
7 | nums.forEach(element => {
8 | array.push(nums[element])
9 | });
10 |
11 | return array;
12 | };
--------------------------------------------------------------------------------
/1920-build-array-from-permutation/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1929-concatenation-of-array/1929-concatenation-of-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number[]}
4 | */
5 | var getConcatenation = function(nums) {
6 | let array2 = []
7 | nums.forEach(element => {
8 | array2.push(element)
9 | });
10 |
11 | let result = nums.concat(array2)
12 | return result
13 | };
--------------------------------------------------------------------------------
/1929-concatenation-of-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1965-employees-with-missing-information/1965-employees-with-missing-information.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | SELECT s.employee_id
4 | FROM Salaries s
5 | LEFT JOIN Employees e ON s.employee_id = e.employee_id
6 | WHERE e.employee_id IS NULL
7 |
8 | UNION ALL
9 |
10 | SELECT e.employee_id
11 | FROM Employees e
12 | LEFT JOIN Salaries s ON e.employee_id = s.employee_id
13 | WHERE s.employee_id IS NULL
14 |
15 | ORDER BY employee_id;
16 |
17 |
18 |
--------------------------------------------------------------------------------
/1965-employees-with-missing-information/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1984-minimum-difference-between-highest-and-lowest-of-k-scores/1984-minimum-difference-between-highest-and-lowest-of-k-scores.py:
--------------------------------------------------------------------------------
1 | class Solution:
2 | def minimumDifference(self, nums: List[int], k: int) -> int:
3 |
4 | nums.sort()
5 |
6 | l = 0
7 | r = k - 1
8 |
9 | res = float('inf')
10 |
11 | while r < len(nums):
12 | res = min(res, nums[r] - nums[l])
13 | l += 1
14 | r += 1
15 |
16 | return res
--------------------------------------------------------------------------------
/1984-minimum-difference-between-highest-and-lowest-of-k-scores/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/1991-find-the-middle-index-in-array/1991-find-the-middle-index-in-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number}
4 | */
5 | var findMiddleIndex = function(nums) {
6 | //melalukan rumus prefix sum
7 | let prefixSum = [];
8 | prefixSum[0] = nums[0]
9 | for (let i = 1; i < nums.length; i++) {
10 | prefixSum[i] = prefixSum[i-1] + nums[i]
11 | }
12 |
13 |
14 | //melakukan perulangan sampai mendapatkan value yang sama
15 | for (let i = 0; i < nums.length; i++) {
16 | let a = prefixSum[i-1];
17 | if(!a) a=0
18 | let b = prefixSum[nums.length - 1] - prefixSum[i+1-1]
19 |
20 | //jika a dan b sama, maka return index nya
21 | if(a==b) return i
22 | }
23 |
24 | //kembalikan -1 jika tidak ada yang sama di perulangan sblmnya
25 | return -1;
26 | };
--------------------------------------------------------------------------------
/1991-find-the-middle-index-in-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2006-count-number-of-pairs-with-absolute-difference-k/2006-count-number-of-pairs-with-absolute-difference-k.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @param {number} k
4 | * @return {number}
5 | */
6 | var countKDifference = function(nums, k) {
7 |
8 | let count = 0
9 | for (let i = 0; i < nums.length; i++) {
10 | const element = nums[i];
11 | for (let j = 0; j < nums.length; j++) {
12 | const diff = nums[j];
13 | if(diff === element + k) count++
14 | }
15 | }
16 | return count
17 | };
--------------------------------------------------------------------------------
/2006-count-number-of-pairs-with-absolute-difference-k/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2070-most-beautiful-item-for-each-query/2070-most-beautiful-item-for-each-query.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[][]} items
3 | * @param {number[]} queries
4 | * @return {number[]}
5 | */
6 | var maximumBeauty = function(items, queries) {
7 | items.sort((a, b) => a[0] - b[0]);
8 | const n = items.length;
9 |
10 | let max = items[0][1];
11 |
12 | for (let i = 0; i < n; i++) {
13 | max = Math.max(max, items[i][1]);
14 | items[i][1] = max;
15 | }
16 |
17 | //metode binarySearch
18 | const binarySearch = (arr, target) => {
19 | let left = 0;
20 | let right = arr.length - 1;
21 | let result = 0;
22 | while (left <= right) {
23 | let mid = Math.floor((left + right) / 2);
24 | if (arr[mid][0] <= target) {
25 | result = arr[mid][1];
26 | left = mid + 1;
27 | } else {
28 | right = mid - 1;
29 | }
30 | }
31 | return result;
32 | };
33 |
34 | const ans = [];
35 | queries.forEach(element => ans.push(binarySearch(items, element)))
36 |
37 | return ans;
38 | };
--------------------------------------------------------------------------------
/2070-most-beautiful-item-for-each-query/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2079-watering-plants/2079-watering-plants.js:
--------------------------------------------------------------------------------
1 | var wateringPlants = function(plants, capacity) {
2 |
3 | let steps = 0
4 | let water = capacity
5 | for (let index = 0; index < plants.length; index++) {
6 | let plant = plants[index];
7 |
8 | if (plant <= water) {
9 | //tambahkan steps
10 | steps++;
11 | //kurangi water sesuai kebutuhan tanaman
12 | water = water - plant;
13 | } else {
14 | //reset water menjadi full lagi
15 | water = capacity;
16 |
17 | //rumus jika kembali dan datang lagi
18 | let additionalSteps = index * 2 + 1;
19 |
20 | //tambahkan ke steps
21 | steps += additionalSteps;
22 |
23 | //kurangi water sesuai kebutuhan tanaman
24 | water = water - plant;
25 | }
26 | }
27 |
28 | return steps
29 |
30 | };
--------------------------------------------------------------------------------
/2079-watering-plants/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2089-find-target-indices-after-sorting-array/2089-find-target-indices-after-sorting-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @param {number} target
4 | * @return {number[]}
5 | */
6 | var targetIndices = function(nums, target) {
7 | let sorted = nums.sort((a,b) => a-b)
8 | let indexs = []
9 | sorted.map((element, index) => {
10 | if(element === target){
11 | indexs.push(index)
12 | }
13 | })
14 |
15 | return indexs
16 | };
--------------------------------------------------------------------------------
/2089-find-target-indices-after-sorting-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2090-k-radius-subarray-averages/2090-k-radius-subarray-averages.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @param {number} k
4 | * @return {number[]}
5 | */
6 | var getAverages = function(nums, k) {
7 |
8 | const prefixSum = new Array(nums.length).fill(-1);
9 | for (let i = 0; i < nums.length; i++) {
10 | if (i === 0) {
11 | prefixSum[i] = nums[i];
12 | } else {
13 | prefixSum[i] = nums[i] + prefixSum[i - 1];
14 | }
15 | }
16 | console.log(prefixSum) // [7,11,14,23,24,32,37,39,45]
17 |
18 | const res = new Array(nums.length).fill(-1);
19 | for (let i = k ; i <= (nums.length - 1) - k; i++) {
20 | if (i === k) {
21 | res[i] = Math.floor(prefixSum[i + k] / (k*2+1));
22 | } else {
23 | res[i] = Math.floor((prefixSum[i + k] - prefixSum[i - k - 1]) / (k*2+1));
24 | }
25 | }
26 | return res;
27 | };
--------------------------------------------------------------------------------
/2090-k-radius-subarray-averages/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2125-number-of-laser-beams-in-a-bank/2125-number-of-laser-beams-in-a-bank.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string[]} bank
3 | * @return {number}
4 | */
5 | var numberOfBeams = function (bank) {
6 |
7 | //variable untuk menyimpan total device yang tersedia
8 | let devices = [];
9 |
10 | //metode matriks untuk mengambil setiap value
11 | for (let i = 0; i < bank.length; i++) {
12 | const row = bank[i].split("");
13 |
14 | //deviceBaris untuk menentukan berapa devices dari setiap baris
15 | let deviceBaris = 0;
16 | for (let j = 0; j < row.length; j++) {
17 | const col = bank[i][j];
18 | //jika setiap value bernilai 1,
19 | if (col === "1") {
20 | //tambah ke deviceBaris
21 | deviceBaris++;
22 | }
23 | }
24 |
25 | //jika deviceBaris tidak ada, tidak usah dimasukkan ke devices
26 | if (deviceBaris > 0) {
27 | devices.push(deviceBaris);
28 | }
29 | }
30 |
31 | //variable untuk menyimpan laser-lasernya
32 | let res = 0;
33 | //melalukan perhitungan Math untuk menghubungkan devices ke devices
34 | for (let i = 0; i < devices.length - 1; i++) {
35 | res += devices[i] * devices[i + 1]
36 | }
37 |
38 | return res;
39 | };
--------------------------------------------------------------------------------
/2125-number-of-laser-beams-in-a-bank/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2154-keep-multiplying-found-values-by-two/2154-keep-multiplying-found-values-by-two.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @param {number} original
4 | * @return {number}
5 | */
6 | var findFinalValue = function(nums, original) {
7 | while(nums.includes(original)){
8 | original *=2
9 | }
10 | return original
11 | };
--------------------------------------------------------------------------------
/2154-keep-multiplying-found-values-by-two/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2215-find-the-difference-of-two-arrays/2215-find-the-difference-of-two-arrays.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums1
3 | * @param {number[]} nums2
4 | * @return {number[][]}
5 | */
6 | var findDifference = function(nums1, nums2) {
7 |
8 | nums1 = new Set(nums1)
9 | nums2 = new Set(nums2)
10 |
11 | for (let item of nums1){
12 | if (nums2.has(item)) {
13 | nums1.delete(item)
14 | nums2.delete(item)
15 | }
16 | }
17 | return [Array.from(nums1),Array.from(nums2)]
18 |
19 | };
--------------------------------------------------------------------------------
/2215-find-the-difference-of-two-arrays/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2243-calculate-digit-sum-of-a-string/2243-calculate-digit-sum-of-a-string.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} s
3 | * @param {number} k
4 | * @return {string}
5 | */
6 | var digitSum = function(s, k) {
7 | while (s.length > k) {
8 | let current = '';
9 | for (let i = 0; i < s.length; i += k) {
10 | let chunk = s.slice(i, i + k);
11 | let sum = chunk.split('').reduce((a, b) => parseInt(a) + parseInt(b));
12 | current += sum;
13 | }
14 | s = current;
15 | }
16 | return s;
17 | };
--------------------------------------------------------------------------------
/2243-calculate-digit-sum-of-a-string/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2270-number-of-ways-to-split-array/2270-number-of-ways-to-split-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number}
4 | */
5 | var waysToSplitArray = function(nums) {
6 |
7 | let prefixSum = []
8 | prefixSum[0] = nums[0]
9 | for (let i = 1; i < nums.length; i++) {
10 | prefixSum[i] = prefixSum[i-1] + nums[i]
11 | }
12 |
13 | let count = 0
14 | for (let i = 0; i < nums.length - 1; i++) {
15 | const left = prefixSum[i];
16 | const right = prefixSum[nums.length - 1] - prefixSum[i+1-1]
17 | if(left>=right) count++
18 | }
19 |
20 | return count
21 |
22 | };
--------------------------------------------------------------------------------
/2270-number-of-ways-to-split-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2284-sender-with-largest-word-count/2284-sender-with-largest-word-count.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string[]} messages
3 | * @param {string[]} senders
4 | * @return {string}
5 | */
6 | var largestWordCount = function(messages, senders) {
7 | let map = new Map();
8 |
9 | //menghitung sender ngirim berapa kata
10 | for (let i = 0; i < senders.length; i++) {
11 | //counter
12 | map.set(senders[i], (map.get(senders[i]) || 0) + messages[i].split(" ").length);
13 | }
14 |
15 | let largerName = "";
16 | let sameValue = null;
17 |
18 | //membandingkan dengan yang lainnya
19 | for (const [sender, value] of map.entries()) {
20 | if (
21 | sameValue === null ||
22 | value > sameValue ||
23 | (value === sameValue && sender > largerName)
24 | ) {
25 | largerName = sender;
26 | sameValue = value;
27 | }
28 | }
29 |
30 | return largerName;
31 | };
--------------------------------------------------------------------------------
/2284-sender-with-largest-word-count/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2352-equal-row-and-column-pairs/2352-equal-row-and-column-pairs.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[][]} grid
3 | * @return {number}
4 | */
5 | var equalPairs = function(grid) {
6 | let count = 0;
7 | const kolom = [];
8 |
9 | for (let row = 0; row < grid.length; row++) {
10 | let temp = [];
11 | for (let col = 0; col < grid.length; col++) {
12 | temp.push(grid[col][row]);
13 | }
14 | kolom.push([...temp]);
15 | }
16 |
17 | for (let i = 0; i < grid.length; i++) {
18 | const baris = grid[i];
19 | for (let j = 0; j < kolom.length; j++) {
20 | const row = kolom[j];
21 | if (JSON.stringify(row) === JSON.stringify(baris)) {
22 | count++;
23 | }
24 | }
25 | }
26 |
27 | return count;
28 | };
--------------------------------------------------------------------------------
/2352-equal-row-and-column-pairs/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2356-number-of-unique-subjects-taught-by-each-teacher/2356-number-of-unique-subjects-taught-by-each-teacher.sql:
--------------------------------------------------------------------------------
1 | # Write your MySQL query statement below
2 |
3 | SELECT teacher_id, COUNT(DISTINCT subject_id) as 'cnt'
4 | FROM Teacher
5 | GROUP BY teacher_id
6 |
--------------------------------------------------------------------------------
/2356-number-of-unique-subjects-taught-by-each-teacher/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2373-largest-local-values-in-a-matrix/2373-largest-local-values-in-a-matrix.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[][]} grid
3 | * @return {number[][]}
4 | */
5 | var largestLocal = function(grid) {
6 |
7 | let lokal = []
8 | for (let row = 0; row < grid.length - 2; row++) {
9 | let temp = []
10 | for (let col = 0; col < grid.length - 2; col++) {
11 | temp.push(0)
12 | }
13 | lokal.push([...temp])
14 | }
15 |
16 | for (let row = 0; row < grid.length - 2; row++) {
17 | for (let col = 0; col < grid.length - 2; col++) {
18 | lokal[row][col] = Math.max(
19 | grid[row][col], grid[row][col+1], grid[row][col+2],
20 | grid[row+1][col], grid[row+1][col+1], grid[row+1][col+2],
21 | grid[row+2][col], grid[row+2][col+1], grid[row+2][col+2]
22 | )
23 | }
24 | }
25 |
26 | return lokal
27 |
28 | };
--------------------------------------------------------------------------------
/2373-largest-local-values-in-a-matrix/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2389-longest-subsequence-with-limited-sum/2389-longest-subsequence-with-limited-sum.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @param {number[]} queries
4 | * @return {number[]}
5 | */
6 |
7 | function binarySearch(prefixSum, target){
8 | let left = 0
9 | let right = prefixSum.length - 1
10 | while(left<=right){
11 | let mid = Math.floor((left+right) / 2)
12 | if(prefixSum[mid] <= target){
13 | left = mid + 1
14 | } else {
15 | right = mid - 1
16 | }
17 | }
18 | return left
19 | }
20 |
21 | var answerQueries = function (nums, queries) {
22 | let sorted = nums.sort((a, b) => a - b);
23 |
24 | let prefixSum = [];
25 | prefixSum[0] = sorted[0];
26 | for (let i = 1; i < sorted.length; i++) {
27 | prefixSum[i] = sorted[i] + prefixSum[i - 1];
28 | }
29 |
30 | let res = []
31 | queries.forEach((queri) => {
32 | res.push(binarySearch(prefixSum, queri))
33 | })
34 |
35 | return res;
36 | };
--------------------------------------------------------------------------------
/2389-longest-subsequence-with-limited-sum/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2390-removing-stars-from-a-string/2390-removing-stars-from-a-string.js:
--------------------------------------------------------------------------------
1 | class Stack{
2 | constructor(){
3 | this.stack = []
4 | }
5 |
6 | push(element){
7 | this.stack.push(element)
8 | }
9 |
10 | pop(){
11 | if(this.isEmpty()) return "Stack Kosong"
12 | return this.stack.pop()
13 | }
14 |
15 | isEmpty(){
16 | return this.stack.length === 0
17 | }
18 |
19 | peek(){
20 | return this.stack[this.stack.length - 1]
21 | }
22 |
23 | print(){
24 | let string = ""
25 | for(let i = 0; i num % 2 === 0).sort((a,b) => a-b);
10 | if(even.length === 0) return -1
11 |
12 | //menghitung / counter untuk mendapatkan jumlah angka genapnya
13 | even.forEach((element) => {map.set(element, (map.get(element) || 0) + 1);});
14 | //sorting map berdasarkan value dari yang terkecil
15 | const result = Array.from(map.entries()).sort((a, b) => b[1] - a[1]).slice(0, 1).map(([key]) => key);
16 |
17 | return result;
18 | };
--------------------------------------------------------------------------------
/2404-most-frequent-even-element/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2404-most-frequent-even-element/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given an integer array nums
, return the most frequent even element.
2 |
3 |
If there is a tie, return the smallest one. If there is no such element, return -1
.
4 |
5 |
6 |
Example 1:
7 |
8 |
Input: nums = [0,1,2,2,4,4,1]
9 | Output: 2
10 | Explanation:
11 | The even elements are 0, 2, and 4. Of these, 2 and 4 appear the most.
12 | We return the smallest one, which is 2.
13 |
14 |
Example 2:
15 |
16 |
Input: nums = [4,4,4,9,2,4]
17 | Output: 4
18 | Explanation: 4 is the even element appears the most.
19 |
20 |
21 |
Example 3:
22 |
23 |
Input: nums = [29,47,21,41,13,37,25,7]
24 | Output: -1
25 | Explanation: There is no even element.
26 |
27 |
28 |
29 |
Constraints:
30 |
31 |
32 | 1 <= nums.length <= 2000
33 | 0 <= nums[i] <= 105
34 |
35 |
--------------------------------------------------------------------------------
/2418-sort-the-people/2418-sort-the-people.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string[]} names
3 | * @param {number[]} heights
4 | * @return {string[]}
5 | */
6 | var sortPeople = function(names, heights) {
7 | let map = new Map()
8 | for (let i = 0; i < names.length; i++) {
9 | map.set(heights[i], names[i])
10 | }
11 | return res = Array.from(map.entries()).sort((a,b) => b[0] - a[0]).map(element => element[1])
12 | };
--------------------------------------------------------------------------------
/2418-sort-the-people/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2428-maximum-sum-of-an-hourglass/2428-maximum-sum-of-an-hourglass.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[][]} grid
3 | * @return {number}
4 | */
5 | var maxSum = function(grid) {
6 | let max = 0
7 |
8 | for (let row = 0; row < grid.length-2; row++) {
9 | for (let col = 0; col < grid[0].length-2; col++) {
10 | max = Math.max(max, grid[row][col] + grid[row][col+1] + grid[row][col+2] + grid[row+1][col+1] + grid[row+2][col] + grid[row+2][col+1] + grid[row+2][col+2])
11 | }
12 | }
13 |
14 | return max
15 | };
--------------------------------------------------------------------------------
/2428-maximum-sum-of-an-hourglass/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2455-average-value-of-even-numbers-that-are-divisible-by-three/2455-average-value-of-even-numbers-that-are-divisible-by-three.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number}
4 | */
5 | var averageValue = function(nums) {
6 | let total = 0;
7 | let even = Math.floor(nums.filter((element) => {
8 | if (element % 3 === 0 && element % 2 === 0) {
9 | total++;
10 | return element % 3 === 0 && element % 2 === 0;
11 | }
12 | }).reduce((cur, number) => {
13 | return cur + number
14 | }, 0) / total);
15 |
16 |
17 | if (total === 0) {
18 | return 0;
19 | } else {
20 | return even;
21 | }
22 | };
--------------------------------------------------------------------------------
/2455-average-value-of-even-numbers-that-are-divisible-by-three/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2455-average-value-of-even-numbers-that-are-divisible-by-three/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given an integer array nums
of positive integers, return the average value of all even integers that are divisible by 3
.
2 |
3 |
Note that the average of n
elements is the sum of the n
elements divided by n
and rounded down to the nearest integer.
4 |
5 |
6 |
Example 1:
7 |
8 |
Input: nums = [1,3,6,10,12,15]
9 | Output: 9
10 | Explanation: 6 and 12 are even numbers that are divisible by 3. (6 + 12) / 2 = 9.
11 |
12 |
13 |
Example 2:
14 |
15 |
Input: nums = [1,2,4,7,10]
16 | Output: 0
17 | Explanation: There is no single number that satisfies the requirement, so return 0.
18 |
19 |
20 |
21 |
Constraints:
22 |
23 |
24 | 1 <= nums.length <= 1000
25 | 1 <= nums[i] <= 1000
26 |
27 |
--------------------------------------------------------------------------------
/2460-apply-operations-to-an-array/2460-apply-operations-to-an-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number[]}
4 | */
5 | var applyOperations = function(nums) {
6 | let result = []
7 | let zero = []
8 |
9 | let temp = nums
10 | for (let index = 0; index < nums.length; index++) {
11 | const first = nums[index];
12 | const second = nums[index + 1]
13 | if(first === second){
14 | temp[index] = nums[index] * 2
15 | temp[index+1] = 0
16 | }
17 | }
18 |
19 | for (let index = 0; index < temp.length; index++) {
20 | const element = nums[index];
21 | if(element !== 0){
22 | result.push(element)
23 | } else {
24 | zero.push(element)
25 | }
26 | }
27 |
28 | return result.concat(zero)
29 | };
--------------------------------------------------------------------------------
/2460-apply-operations-to-an-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2465-number-of-distinct-averages/2465-number-of-distinct-averages.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number}
4 | */
5 | var distinctAverages = function(nums) {
6 |
7 | let sorted = nums.sort((a, b) => a-b)
8 | let set = new Set()
9 | while(sorted.length !== 0){
10 | let avg = (sorted.shift() + sorted.pop()) / 2
11 | set.add(avg)
12 | }
13 |
14 | return set.size
15 |
16 | };
--------------------------------------------------------------------------------
/2465-number-of-distinct-averages/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2470-removing-stars-from-a-string/2470-removing-stars-from-a-string.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} s
3 | * @return {string}
4 | */
5 | var removeStars = function(s) {
6 | let stack = []
7 |
8 | s.split("").forEach((element) => {
9 | if(element != "*"){
10 | stack.push(element)
11 | } else {
12 | stack.pop()
13 | }
14 | })
15 |
16 | return stack.join("")
17 | };
--------------------------------------------------------------------------------
/2500-delete-greatest-value-in-each-row/2500-delete-greatest-value-in-each-row.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[][]} grid
3 | * @return {number}
4 | */
5 | var deleteGreatestValue = function (grid) {
6 | let res = 0
7 |
8 | //sorting sub array, karena kita ingin mengambil yang terbesar
9 | for (let i = 0; i < grid.length; i++) {
10 | grid[i].sort((a, b) => b - a);
11 | }
12 |
13 | //lakukan perulangan dengan jumlah isi dari sub array
14 | let total_row = grid[0].length
15 | for (let i = 0; i < total_row; i++) {
16 | let max = -Infinity;
17 | //perulangan untuk mencari nilai maks dari isi subarray
18 | for (let j = 0; j < grid.length; j++) {
19 | //bandingkan sub array sebelumnya dan sub array selanjutnya
20 | max = Math.max(max, grid[j][i]);
21 | }
22 |
23 | //tambah res dengan nilai maksnya, lalu lanjutkan ke sub array selanjutnya
24 | res += max;
25 | }
26 |
27 | return res;
28 | };
--------------------------------------------------------------------------------
/2500-delete-greatest-value-in-each-row/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2535-difference-between-element-sum-and-digit-sum-of-an-array/2535-difference-between-element-sum-and-digit-sum-of-an-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number}
4 | */
5 | var differenceOfSum = function(nums) {
6 |
7 | let a = 0
8 | let b = 0
9 | for (let i = 0; i < nums.length; i++) {
10 | a += nums[i]
11 | const element = String(nums[i]).split('');
12 | for (let j = 0; j < element.length; j++) {
13 | b+=parseInt(element[j]);
14 | }
15 | }
16 |
17 | return a - b
18 | };
--------------------------------------------------------------------------------
/2535-difference-between-element-sum-and-digit-sum-of-an-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2545-sort-the-students-by-their-kth-score/2545-sort-the-students-by-their-kth-score.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[][]} score
3 | * @param {number} k
4 | * @return {number[][]}
5 | */
6 | var sortTheStudents = function(score, k) {
7 | return score.sort((a, b) => b[k] - a[k])
8 | };
--------------------------------------------------------------------------------
/2545-sort-the-students-by-their-kth-score/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2554-maximum-number-of-integers-to-choose-from-a-range-i/2554-maximum-number-of-integers-to-choose-from-a-range-i.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} banned
3 | * @param {number} n
4 | * @param {number} maxSum
5 | * @return {number}
6 | */
7 | var maxCount = function (banned, n, maxSum) {
8 | let sum = 0, count = 0;
9 |
10 | let set = new Set(banned)
11 | for (let i = 1; i <= n; i++) {
12 | if (!set.has(i)) {
13 | //jika maxsum masih lebih besar dari currentsum
14 | if(maxSum >= sum+i){
15 | //tambahkan currentsum dengan indeks
16 | sum += i
17 | //tambahkan count untuk result
18 | count++
19 | }
20 | }
21 | }
22 |
23 | return count;
24 | };
--------------------------------------------------------------------------------
/2554-maximum-number-of-integers-to-choose-from-a-range-i/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2562-find-the-array-concatenation-value/2562-find-the-array-concatenation-value.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number}
4 | */
5 | var findTheArrayConcVal = function(nums) {
6 | let iterasi = Math.floor(nums.length / 2)
7 |
8 | let start = 0
9 |
10 | let end = nums.length - 1
11 |
12 | let res = 0
13 |
14 | if(nums.length % 2 !== 0){
15 |
16 | res = nums[iterasi]
17 |
18 | }
19 |
20 | while(start < iterasi){
21 |
22 | res += parseInt(`${nums[start]}${nums[end]}`)
23 |
24 | start++
25 |
26 | end--
27 |
28 | }
29 |
30 | return res
31 |
32 | };
--------------------------------------------------------------------------------
/2562-find-the-array-concatenation-value/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2574-left-and-right-sum-differences/2574-left-and-right-sum-differences.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number[]}
4 | */
5 | var leftRightDifference = function(nums) {
6 |
7 | let leftPrefixSum = []
8 | leftPrefixSum[0] = 0
9 | for (let i = 1; i < nums.length; i++) {
10 | leftPrefixSum[i] = leftPrefixSum[i-1] + nums[i-1]
11 | }
12 |
13 | let rightPrefixSum = []
14 | rightPrefixSum[nums.length - 1] = 0
15 | for (let i = nums.length - 1; i > 0; i--) {
16 | rightPrefixSum[i-1] = nums[i] + rightPrefixSum[i]
17 | }
18 |
19 | let res = []
20 | for (let i = 0; i < nums.length; i++) {
21 | res.push(Math.abs(leftPrefixSum[i] - rightPrefixSum[i]))
22 |
23 | }
24 |
25 | return res
26 | };
--------------------------------------------------------------------------------
/2574-left-and-right-sum-differences/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2586-count-the-number-of-vowel-strings-in-range/2586-count-the-number-of-vowel-strings-in-range.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string[]} words
3 | * @param {number} left
4 | * @param {number} right
5 | * @return {number}
6 | */
7 | var vowelStrings = function (words, left, right) {
8 | const vocal = ["a", "i", "u", "e", "o"];
9 | let res = 0;
10 |
11 | for (let i = left; i <= right; i++) {
12 | const element = words[i];
13 | if (vocal.includes(element[0]) && vocal.includes(element[element.length-1])) {
14 | res++;
15 | }
16 | }
17 |
18 | return res;
19 | };
--------------------------------------------------------------------------------
/2586-count-the-number-of-vowel-strings-in-range/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2610-convert-an-array-into-a-2d-array-with-conditions/2610-convert-an-array-into-a-2d-array-with-conditions.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number[][]}
4 | */
5 | var findMatrix = function(nums) {
6 | let map = new Map();
7 | let answer = [];
8 |
9 | //counter
10 | for (num of nums) {
11 | map.set(num, (map.get(num) || 0) + 1);
12 | }
13 |
14 | map.forEach((value, key) => {
15 | for (let i = 0; i < value; i++) {
16 | let temp = answer[i]
17 | temp
18 | if (!temp) {
19 | answer.push([]);
20 | }
21 | answer[i].push(key);
22 | }
23 | });
24 | return answer;
25 | };
--------------------------------------------------------------------------------
/2610-convert-an-array-into-a-2d-array-with-conditions/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2620-counter/2620-counter.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number} n
3 | * @return {Function} counter
4 | */
5 | var createCounter = function(n) {
6 |
7 | let current = n
8 | return function() {
9 | console.log(current);
10 | return current++;
11 | };
12 | };
13 |
14 | /**
15 | * const counter = createCounter(10)
16 | * counter() // 10
17 | * counter() // 11
18 | * counter() // 12
19 | */
--------------------------------------------------------------------------------
/2620-counter/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2620-counter/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given an integer n
, return a counter
function. This counter
function initially returns n
and then returns 1 more than the previous value every subsequent time it is called (n
, n + 1
, n + 2
, etc).
2 |
3 |
4 |
Example 1:
5 |
6 |
Input:
7 | n = 10
8 | ["call","call","call"]
9 | Output: [10,11,12]
10 | Explanation:
11 | counter() = 10 // The first time counter() is called, it returns n.
12 | counter() = 11 // Returns 1 more than the previous time.
13 | counter() = 12 // Returns 1 more than the previous time.
14 |
15 |
16 |
Example 2:
17 |
18 |
Input:
19 | n = -2
20 | ["call","call","call","call","call"]
21 | Output: [-2,-1,0,1,2]
22 | Explanation: counter() initially returns -2. Then increases after each sebsequent call.
23 |
24 |
25 |
26 |
Constraints:
27 |
28 |
29 | -1000 <= n <= 1000
30 | At most 1000 calls to counter() will be made
31 |
32 |
--------------------------------------------------------------------------------
/2626-array-reduce-transformation/2626-array-reduce-transformation.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @param {Function} fn
4 | * @param {number} init
5 | * @return {number}
6 | */
7 | var reduce = function(nums, fn, init) {
8 | if(nums.length === 0){
9 | return init
10 | }
11 |
12 | var temp = 0;
13 | for (let index = 0; index < nums.length; index++) {
14 | const element = nums[index];
15 | temp = fn(init,element)
16 | init = temp;
17 | }
18 |
19 | return temp;
20 | } ;
--------------------------------------------------------------------------------
/2626-array-reduce-transformation/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2629-function-composition/2629-function-composition.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {Function[]} functions
3 | * @return {Function}
4 | */
5 | var compose = function(functions) {
6 | return (value) => {
7 | return functions.reduceRight((result, fn) => {
8 | return fn(result);
9 | }, value);
10 | };
11 | };
12 |
13 | /**
14 | * const fn = compose([x => x + 1, x => 2 * x])
15 | * fn(4) // 9
16 | */
--------------------------------------------------------------------------------
/2629-function-composition/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2634-filter-elements-from-array/2634-filter-elements-from-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} arr
3 | * @param {Function} fn
4 | * @return {number[]}
5 | */
6 | var filter = function(arr, fn) {
7 | const result = [];
8 |
9 | for (let index = 0; index < arr.length; index++) {
10 | if(fn(arr[index], index)){
11 | result.push(arr[index])
12 | };
13 | }
14 |
15 | return result;
16 | };
--------------------------------------------------------------------------------
/2634-filter-elements-from-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2635-apply-transform-over-each-element-in-array/2635-apply-transform-over-each-element-in-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} arr
3 | * @param {Function} fn
4 | * @return {number[]}
5 | */
6 | var map = function(arr, fn) {
7 | const toReturnArr = new Array(arr.length);
8 | for( let i=0;i}
3 | */
4 | var fibGenerator = function*() {
5 | let a = 0, b = 1
6 | yield 0
7 | yield 1
8 | while(true) {
9 | [a,b] = [b, a + b]
10 | yield b
11 | }
12 | };
13 |
14 | /**
15 | * const gen = fibGenerator();
16 | * gen.next().value; // 0
17 | * gen.next().value; // 1
18 | */
--------------------------------------------------------------------------------
/2648-generate-fibonacci-sequence/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2648-generate-fibonacci-sequence/README.md:
--------------------------------------------------------------------------------
1 | Easy
Write a generator function that returns a generator object which yields the fibonacci sequence.
2 |
3 |
The fibonacci sequence is defined by the relation Xn = Xn-1 + Xn-2
.
4 |
5 |
The first few numbers of the series are 0, 1, 1, 2, 3, 5, 8, 13
.
6 |
7 |
8 |
Example 1:
9 |
10 |
Input: callCount = 5
11 | Output: [0,1,1,2,3]
12 | Explanation:
13 | const gen = fibGenerator();
14 | gen.next().value; // 0
15 | gen.next().value; // 1
16 | gen.next().value; // 1
17 | gen.next().value; // 2
18 | gen.next().value; // 3
19 |
20 |
21 |
Example 2:
22 |
23 |
Input: callCount = 0
24 | Output: []
25 | Explanation: gen.next() is never called so nothing is outputted
26 |
27 |
28 |
29 |
Constraints:
30 |
31 |
32 | 0 <= callCount <= 50
33 |
34 |
--------------------------------------------------------------------------------
/2652-sum-multiples/2652-sum-multiples.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number} n
3 | * @return {number}
4 | */
5 | var sumOfMultiples = function(n) {
6 | let ans = []
7 | for (let i = 1; i <= n; i++) {
8 | if(i % 3 === 0 || i % 5 === 0 || i % 7 === 0){
9 | ans.push(i)
10 | }
11 | }
12 |
13 | ans
14 |
15 | let sum = ans.reduce((cur, num) => {
16 | return cur + num
17 | }, 0)
18 |
19 | return sum;
20 | };
--------------------------------------------------------------------------------
/2652-sum-multiples/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2656-maximum-sum-with-exactly-k-elements/2656-maximum-sum-with-exactly-k-elements.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @param {number} k
4 | * @return {number}
5 | */
6 | var maximizeSum = function(nums, k) {
7 | let max = -Infinity
8 | let sum = 0
9 | for(let i = 0; i < k; i++){
10 | max = Math.max(...nums)
11 | sum += max
12 | nums.push(max + 1)
13 | }
14 |
15 | return sum
16 | };
--------------------------------------------------------------------------------
/2656-maximum-sum-with-exactly-k-elements/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2657-find-the-prefix-common-array-of-two-arrays/2657-find-the-prefix-common-array-of-two-arrays.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} A
3 | * @param {number[]} B
4 | * @return {number[]}
5 | */
6 | var findThePrefixCommonArray = function(A, B) {
7 | let res = []
8 |
9 | for (let i = 1; i <= A.length; i++) {
10 | let a = A.slice(0, i)
11 | let b = B.slice(0, i)
12 | let arr = a.concat(b)
13 | let map = new Map()
14 |
15 | let temp = 0
16 | arr.forEach((element) => {
17 | map.set(element, (map.get(element) || 0) + 1)
18 | if (map.get(element) > 1) {
19 | temp++
20 | }
21 | })
22 | res.push(temp)
23 | }
24 |
25 | return res
26 | };
--------------------------------------------------------------------------------
/2657-find-the-prefix-common-array-of-two-arrays/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2665-counter-ii/2665-counter-ii.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {integer} init
3 | * @return { increment: Function, decrement: Function, reset: Function }
4 | */
5 | var createCounter = function(init) {
6 | let currentCount = init;
7 | return {
8 | increment: function() {
9 | currentCount += 1;
10 | return currentCount;
11 | },
12 | decrement: function() {
13 | currentCount -= 1;
14 | return currentCount;
15 | },
16 | reset: function() {
17 | currentCount = init;
18 | return currentCount;
19 | },
20 | }
21 | };
22 |
23 | /**
24 | * const counter = createCounter(5)
25 | * counter.increment(); // 6
26 | * counter.reset(); // 5
27 | * counter.decrement(); // 4
28 | */
--------------------------------------------------------------------------------
/2665-counter-ii/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2667-create-hello-world-function/2667-create-hello-world-function.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @return {Function}
3 | */
4 | var createHelloWorld = function() {
5 | return function(...args) {
6 | return "Hello World"
7 | }
8 | };
9 |
10 | /**
11 | * const f = createHelloWorld();
12 | * f(); // "Hello World"
13 | */
--------------------------------------------------------------------------------
/2667-create-hello-world-function/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2667-create-hello-world-function/README.md:
--------------------------------------------------------------------------------
1 | Easy
Write a function
createHelloWorld
. It should return a new function that always returns
"Hello World"
.
2 |
3 |
Example 1:
4 |
5 |
Input: args = []
6 | Output: "Hello World"
7 | Explanation:
8 | const f = createHelloWorld();
9 | f(); // "Hello World"
10 |
11 | The function returned by createHelloWorld should always return "Hello World".
12 |
13 |
14 |
Example 2:
15 |
16 |
Input: args = [{},null,42]
17 | Output: "Hello World"
18 | Explanation:
19 | const f = createHelloWorld();
20 | f({}, null, 42); // "Hello World"
21 |
22 | Any arguments could be passed to the function but it should still always return "Hello World".
23 |
24 |
25 |
26 |
Constraints:
27 |
28 |
29 | 0 <= args.length <= 10
30 |
31 |
--------------------------------------------------------------------------------
/2670-find-the-distinct-difference-array/2670-find-the-distinct-difference-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number[]} nums
3 | * @return {number[]}
4 | */
5 | var distinctDifferenceArray = function(nums) {
6 | let res = []
7 | nums.forEach((element, index) => {
8 | let setPrefix = new Set()
9 | let setSuffix = new Set()
10 |
11 | for (let i = 0; i < index+1; i++) {
12 | setPrefix.add(nums[i])
13 | }
14 | for (let i = index+1; i < nums.length; i++) {
15 | setSuffix.add(nums[i])
16 | }
17 | res.push(setPrefix.size - setSuffix.size)
18 | })
19 |
20 | return res
21 | };
--------------------------------------------------------------------------------
/2670-find-the-distinct-difference-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2677-chunk-array/2677-chunk-array.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {Array} arr
3 | * @param {number} size
4 | * @return {Array[]}
5 | */
6 | var chunk = function(arr, size) {
7 | var chunkedArray = [];
8 | var index = 0;
9 |
10 | while (index < arr.length) {
11 | const chunk = arr.slice(index, index + size)
12 | chunkedArray.push(chunk);
13 | index += size;
14 | }
15 |
16 | return chunkedArray;
17 | };
--------------------------------------------------------------------------------
/2677-chunk-array/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2678-number-of-senior-citizens/2678-number-of-senior-citizens.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string[]} details
3 | * @return {number}
4 | */
5 | var countSeniors = function(details) {
6 | let count = 0;
7 | details.forEach(element => {
8 | const age = element.slice(11,13)
9 | if(age > 60) count++
10 | });
11 |
12 | return count
13 | };
--------------------------------------------------------------------------------
/2678-number-of-senior-citizens/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2729-check-if-the-number-is-fascinating/2729-check-if-the-number-is-fascinating.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number} n
3 | * @return {boolean}
4 | */
5 | var isFascinating = function(n) {
6 |
7 | //gabungkan jadi satu
8 | let res = `${n}${n*2}${n*3}`.split('')
9 |
10 | if(res.includes('0')){
11 | return false
12 | }
13 | if(res.length !== 9){
14 | return false
15 | }
16 | if ((new Set(res)).size !== 9) {
17 | return false
18 | }
19 |
20 | return true
21 | };
--------------------------------------------------------------------------------
/2729-check-if-the-number-is-fascinating/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2732-counter/2732-counter.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {number} n
3 | * @return {Function} counter
4 | */
5 | var createCounter = function(n) {
6 |
7 | let current = n
8 | return function() {
9 | console.log(current);
10 | return current++;
11 | };
12 | };
13 |
14 | /**
15 | * const counter = createCounter(10)
16 | * counter() // 10
17 | * counter() // 11
18 | * counter() // 12
19 | */
--------------------------------------------------------------------------------
/2732-counter/README.md:
--------------------------------------------------------------------------------
1 | Easy
Given an integer n
, return a counter
function. This counter
function initially returns n
and then returns 1 more than the previous value every subsequent time it is called (n
, n + 1
, n + 2
, etc).
2 |
3 |
4 | Example 1:
5 |
6 |
7 | Input:
8 | n = 10
9 | ["call","call","call"]
10 | Output: [10,11,12]
11 | Explanation:
12 | counter() = 10 // The first time counter() is called, it returns n.
13 | counter() = 11 // Returns 1 more than the previous time.
14 | counter() = 12 // Returns 1 more than the previous time.
15 |
16 |
17 | Example 2:
18 |
19 |
20 | Input:
21 | n = -2
22 | ["call","call","call","call","call"]
23 | Output: [-2,-1,0,1,2]
24 | Explanation: counter() initially returns -2. Then increases after each sebsequent call.
25 |
26 |
27 |
28 | Constraints:
29 |
30 |
31 | -1000 <= n <= 1000
32 | At most 1000 calls to counter() will be made
33 |
34 |
--------------------------------------------------------------------------------
/2785-sort-vowels-in-a-string/2785-sort-vowels-in-a-string.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} s
3 | * @return {string}
4 | */
5 | var sortVowels = function (s) {
6 | const vowel = "AEIOUaeiou";
7 | let vowels = "";
8 |
9 | for (let i = 0; i < s.length; i++) {
10 | if (vowel.includes(s[i])) {
11 | vowels += s[i];
12 | }
13 | }
14 |
15 | vowels = vowels.split("").sort((a, b) => a.charCodeAt() - b.charCodeAt()).join("");
16 |
17 | let result = "";
18 |
19 | let j = 0;
20 | for (let i = 0; i < s.length; i++) {
21 | if (vowel.includes(s[i])) {
22 | result += vowels[j];
23 | j++;
24 | } else {
25 | result += s[i];
26 | }
27 | }
28 |
29 | return result;
30 | };
--------------------------------------------------------------------------------
/2785-sort-vowels-in-a-string/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2809-create-hello-world-function/2809-create-hello-world-function.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @return {Function}
3 | */
4 | var createHelloWorld = function() {
5 | return function(...args) {
6 | return "Hello World"
7 | }
8 | };
9 |
10 | /**
11 | * const f = createHelloWorld();
12 | * f(); // "Hello World"
13 | */
--------------------------------------------------------------------------------
/2809-create-hello-world-function/README.md:
--------------------------------------------------------------------------------
1 | Easy
Write a function createHelloWorld
. It should return a new function that always returns "Hello World"
.
2 |
3 | Example 1:
4 |
5 |
6 | Input: args = []
7 | Output: "Hello World"
8 | Explanation:
9 | const f = createHelloWorld();
10 | f(); // "Hello World"
11 |
12 | The function returned by createHelloWorld should always return "Hello World".
13 |
14 |
15 | Example 2:
16 |
17 |
18 | Input: args = [{},null,42]
19 | Output: "Hello World"
20 | Explanation:
21 | const f = createHelloWorld();
22 | f({}, null, 42); // "Hello World"
23 |
24 | Any arguments could be passed to the function but it should still always return "Hello World".
25 |
26 |
27 |
28 | Constraints:
29 |
30 |
31 | 0 <= args.length <= 10
32 |
33 |
--------------------------------------------------------------------------------
/2870-minimum-number-of-operations-to-make-array-empty/2870-minimum-number-of-operations-to-make-array-empty.py:
--------------------------------------------------------------------------------
1 | class Solution:
2 | def minOperations(self, nums: List[int]) -> int:
3 | count = Counter(nums)
4 | res = 0
5 |
6 | for total in count.values():
7 |
8 | #return -1, karena kita hanya mengambil 2 atau 3
9 | if total < 2:
10 | return -1
11 |
12 | res += total // 3
13 | if total % 3 == 1 or total % 3 == 2:
14 | res += 1
15 |
16 | return res
17 |
--------------------------------------------------------------------------------
/2870-minimum-number-of-operations-to-make-array-empty/NOTES.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # leetcode-solved
2 | Collection of LeetCode questions to ace the coding interview! - Created using [LeetHub](https://github.com/QasimWani/LeetHub)
3 |
--------------------------------------------------------------------------------