Swift Coding Test Course, Stack and Queue

Problem Description

Given an array of integers arr, each element in the array is a non-negative integer. For each element, the task is to find the index of the first element to its right that is greater than itself, and create a new array with those indices. If there is no such element, store -1.

For example, if the array is [2, 1, 5, 3, 6, 4], the result will be [2, 1, 1, 1, -1, -1].

Approach to the Problem

This problem can be efficiently approached using a stack. By traversing the entire array only once, we can use the stack to solve the issues occurring on the right side of each element. This reduces the time complexity.

Algorithm Explanation

  1. Initialize an array result to store the results.
  2. Initialize a stack to store indices.
  3. Traverse the array from right to left.
    • If the current element is greater than the last element in the stack, pop elements from the stack and store values at the corresponding indices in the result array.
    • If the stack is empty, store -1 in the result array.
    • Add the current index to the stack.
  4. Return the final result array.

Code Implementation

func nextGreaterElement(arr: [Int]) -> [Int] {
        var result = Array(repeating: -1, count: arr.count)
        var stack: [Int] = []

        for i in (0..<arr.count).reversed() {="" while="" !stack.isempty="" &#038;&#038;="" arr[i]="" &lt;="" arr[stack.last!]="" result[i]="stack.removeLast()" }="" if="" stack.isempty="" stack.append(i)="" return="" result="" let="" inputarray="[2," 1,="" 5,="" 3,="" 6,="" 4]="" output="nextGreaterElement(arr:" inputarray)="" print(output)="" result:="" [2,="" -1,="" -1]="" <="" code=""></arr.count).reversed()>
<h2>Code Explanation</h2> <p>The code is structured as follows:</p> <ul> <li><code>result</code>: The result array is initialized to -1.</li> <li><code>stack</code>: The stack is initialized to store indices.</li> <li><code>reversed</code>: The array is traversed in reverse. This is done to compare each element with the elements to its right.</li> <li>Using the pop operation from the stack to find elements greater than itself.</li> <li>Updating the result array with the found index and adding the current index to the stack.</li> </ul> <h2>Time Complexity</h2> <p>This algorithm adds and removes each element from the stack only once, thus the time complexity is <code>O(n)</code>. This is very efficient.</p> <h2>Conclusion</h2> <p>In this lecture, we learned how to efficiently solve the given problem using a stack. Stacks and queues are data structures that often appear in various coding interview problems. Therefore, understanding and utilizing these two data structures is essential.</p> <p>By solving this problem, try to develop your own problem-solving approach and attempt various problems. More problems related to stacks and queues will be covered later.</p> <p></p> <div id="jp-relatedposts" class="jp-relatedposts"> <h3 class="jp-relatedposts-headline"><em>관련</em></h3> </div>
<footer class="entry-footer"> <span class="byline"><span class="author vcard"><img alt="" src="https://secure.gravatar.com/avatar/5b7f47db621d1eab02540d35048be506?s=49&amp;d=mm&amp;r=g" srcset="https://secure.gravatar.com/avatar/5b7f47db621d1eab02540d35048be506?s=98&amp;d=mm&amp;r=g 2x" class="avatar avatar-49 photo" height="49" width="49" decoding="async"><span class="screen-reader-text">Author </span> <a class="url fn n" href="https://atmokpo.com/w/en/author/root/">root</a></span></span><span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://atmokpo.com/w/34782/" rel="bookmark"><time class="entry-date published" datetime="2024-11-01T09:31:54+00:00">2024/11/01</time><time class="updated" datetime="2024-11-01T11:26:34+00:00">2024/11/01</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://atmokpo.com/w/category/swift-coding-test/" rel="category tag">Swift Coding Test</a></span> </footer><!-- .entry-footer -->
<nav class="navigation post-navigation" aria-label="Posts"> <h2 class="screen-reader-text">Post navigation</h2> <div class="nav-links"><div class="nav-previous"><a href="https://atmokpo.com/w/34780/" rel="prev"><span class="meta-nav" aria-hidden="true">Previous</span> <span class="screen-reader-text">Previous post:</span> <span class="post-title">Swift Coding Test Course, Finding the Sum of Numbers</span></a></div><div class="nav-next"><a href="https://atmokpo.com/w/34784/" rel="next"><span class="meta-nav" aria-hidden="true">Next</span> <span class="screen-reader-text">Next post:</span> <span class="post-title">Swift Coding Test Course, Creating an Ascending Sequence with Stack</span></a></div></div> </nav>
<aside id="secondary" class="sidebar widget-area"> <section id="block-2" class="widget widget_block widget_search"><form role="search" method="get" action="https://atmokpo.com/w/en/" class="wp-block-search__button-outside wp-block-search__text-button wp-block-search"><label class="wp-block-search__label" for="wp-block-search__input-1">Search</label><div class="wp-block-search__inside-wrapper "><input class="wp-block-search__input" id="wp-block-search__input-1" placeholder="" value="" type="search" name="s" required=""><button aria-label="Search" class="wp-block-search__button wp-element-button" type="submit">Search</button></div></form></section><section id="block-10" class="widget widget_block"><ul class="wp-block-page-list"><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/c-coding-test-tutorials/">C++ Coding Test Tutorials</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/collection-of-c-coding-test-tutorials/">Collection of C# Coding Test Tutorials</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/deep-learning-automated-trading/">Deep learning Automated trading</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/deep-learning-natural-language-processing/">Deep learning natural language processing</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/english-sentence-study/">English sentence study</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/flutter-course/">Flutter course</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/gan-deep-learning-course/">GAN deep learning course</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/java-android-app-development/">Java Android app development</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/java-coding-test/">Java Coding Test</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/javascript-coding-test/">Javascript Coding Test</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/kotlin-android-app-development/">Kotlin Android app development</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/kotlin-coding-test/">Kotlin coding test</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/python-auto-trading/">Python Auto Trading</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/python-coding-test/">Python Coding Test</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/python-study/">Python Study</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/pytorch-study/">PyTorch Study</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/react-basics-course/">React basics course</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/spring-boot-backend-development/">Spring Boot backend development</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/swift-coding-test/">Swift Coding Test</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/swift-iphone-app-development-swiftui/">Swift iPhone app development (SwiftUI)</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/swift-iphone-app-development-uikit/">Swift iPhone app development (UIKit)</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/unity-basic/">Unity Basic</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/using-hugging-face/">Using Hugging Face</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/uwp-programming/">UWP Programming</a></li><li class="wp-block-pages-list__item"><a class="wp-block-pages-list__item__link" href="https://atmokpo.com/w/wpf-programming/">WPF Programming</a></li></ul></section><section id="listcategorypostswidget-3" class="widget widget_listcategorypostswidget"><h2 class="widget-title">Category Post List</h2><ul class="lcp_catlist" id="lcp_instance_listcategorypostswidget-3"><li><a href="https://atmokpo.com/w/34696/">Swift Coding Test Course, Exploring Geometry</a></li><li><a href="https://atmokpo.com/w/34694/">Swift Coding Test Course, Radix Sort</a></li><li><a href="https://atmokpo.com/w/34690/">Swift Coding Test Course, Representation of Graphs</a></li><li><a href="https://atmokpo.com/w/34692/">Swift Coding Test Course, Greedy Algorithm</a></li><li><a href="https://atmokpo.com/w/34688/">Swift Coding Test Course, Finding the Sum of Intervals 3</a></li><li><a href="https://atmokpo.com/w/34686/">Swift Coding Test Course, Interval Sum Calculation 1</a></li><li><a href="https://atmokpo.com/w/34684/">Swift Coding Test Course, Interval Sum</a></li><li><a href="https://atmokpo.com/w/34680/">Swift Coding Test Course, Finding the Number of Steps</a></li><li><a href="https://atmokpo.com/w/34682/">Swift Coding Test Course, Finding the Product of an Interval</a></li><li><a href="https://atmokpo.com/w/34678/">Swift Coding Test Course, Pathfinding</a></li></ul><ul class="lcp_paginator"><li><a href="https://atmokpo.com/w/34782/?lcp_pagelistcategorypostswidget-3=11#lcp_instance_listcategorypostswidget-3" title="11" class="lcp_prevlink">&lt;&lt;</a></li><li><a href="https://atmokpo.com/w/34782/?lcp_pagelistcategorypostswidget-3=1#lcp_instance_listcategorypostswidget-3" title="1">1</a></li><span class="lcp_elipsis">...</span><li><a href="https://atmokpo.com/w/34782/?lcp_pagelistcategorypostswidget-3=7#lcp_instance_listcategorypostswidget-3" title="7">7</a></li><li><a href="https://atmokpo.com/w/34782/?lcp_pagelistcategorypostswidget-3=8#lcp_instance_listcategorypostswidget-3" title="8">8</a></li><li><a href="https://atmokpo.com/w/34782/?lcp_pagelistcategorypostswidget-3=9#lcp_instance_listcategorypostswidget-3" title="9">9</a></li><li><a href="https://atmokpo.com/w/34782/?lcp_pagelistcategorypostswidget-3=10#lcp_instance_listcategorypostswidget-3" title="10">10</a></li><li><a href="https://atmokpo.com/w/34782/?lcp_pagelistcategorypostswidget-3=11#lcp_instance_listcategorypostswidget-3" title="11">11</a></li><li class="lcp_currentpage">12</li><li><a href="https://atmokpo.com/w/34782/?lcp_pagelistcategorypostswidget-3=13#lcp_instance_listcategorypostswidget-3" title="13">13</a></li><li><a href="https://atmokpo.com/w/34782/?lcp_pagelistcategorypostswidget-3=14#lcp_instance_listcategorypostswidget-3" title="14">14</a></li><li><a href="https://atmokpo.com/w/34782/?lcp_pagelistcategorypostswidget-3=13#lcp_instance_listcategorypostswidget-3" title="13" class="lcp_nextlink">&gt;&gt;</a></li></ul></section><section id="block-3" class="widget widget_block"> <div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow"> <h3 class="wp-block-heading">최신 글</h3> <ul class="wp-block-latest-posts__list wp-block-latest-posts"><li><a class="wp-block-latest-posts__post-title" href="https://atmokpo.com/w/37979/">Unity 2D Game Development, Create a Platform Game Including Jumps, Obstacles, and Enemies.</a></li> <li><a class="wp-block-latest-posts__post-title" href="https://atmokpo.com/w/37977/">Unity 2D Game Development, Adding Effects Using Particle System Implementing visual effects such as explosions and flames using the particle system.</a></li> <li><a class="wp-block-latest-posts__post-title" href="https://atmokpo.com/w/37973/">Unity 2D Game Development, Touch Input and Mobile Game Development Creation of 2D games utilizing touch input on mobile devices.</a></li> <li><a class="wp-block-latest-posts__post-title" href="https://atmokpo.com/w/37975/">Unity 2D Game Development, Power-Up and Buff System Creating a power-up system that temporarily enhances the player’s abilities.</a></li> <li><a class="wp-block-latest-posts__post-title" href="https://atmokpo.com/w/37971/">Unity 2D Game Development, Quest and Mission System Creating a quest system where rewards are given for achieving specific goals.</a></li> </ul></div></div> </section> </aside><!-- .sidebar .widget-area -->
<footer id="colophon" class="site-footer"> <div class="site-info"> <span class="site-title"><a href="https://atmokpo.com/w/en/" rel="home">라이브스마트</a></span> <a href="https://wordpress.org/" class="imprint"> Proudly powered by WordPress </a> </div><!-- .site-info --> </footer><!-- .site-footer -->
<link rel="stylesheet" id="lcp_paginator-css" href="https://atmokpo.com/w/wp-content/plugins/list-category-posts//lcp_paginator.css?ver=6.7.2" media="all"> <script src="https://atmokpo.com/w/wp-content/plugins/collapse-magic/js/collapse-magic.js?x=68&amp;ver=1.0" id="claps-main-js"></script> <script defer="" src="https://atmokpo.com/w/wp-content/plugins/koko-analytics/assets/dist/js/script.js?ver=1.6.4" id="koko-analytics-js"></script> <script src="https://atmokpo.com/w/wp-content/plugins/responsive-accordion-and-collapse/js/accordion-custom.js?ver=6.7.2" id="call_ac-custom-js-front-js"></script> <script src="https://atmokpo.com/w/wp-content/plugins/responsive-accordion-and-collapse/js/accordion.js?ver=6.7.2" id="call_ac-js-front-js"></script> <script src="https://stats.wp.com/e-202515.js" id="jetpack-stats-js" data-wp-strategy="defer"></script> <script id="jetpack-stats-js-after"> _stq = window._stq || []; _stq.push([ "view", JSON.parse("{\"v\":\"ext\",\"blog\":\"238449126\",\"post\":\"34782\",\"tz\":\"0\",\"srv\":\"atmokpo.com\",\"j\":\"1:14.2.1\"}") ]); _stq.push([ "clickTrackerInit", "238449126", "34782" ]); </script> <script> document.querySelectorAll("code").forEach(function(codeBlock) { // 내용에 '<'나 '>'가 포함된 경우에만 변환 if (codeBlock.innerHTML.includes("<") && codeBlock.innerHTML.includes(">")) { codeBlock.textContent = codeBlock.innerHTML; } }); </script>