CS2040S - Data Structures and Algorithms (Java)

Introduction

This course introduces students to the design and implementation of fundamental data structures and algorithms. The course covers basic data structures (linked lists, stacks, queues, binary heaps, hash tables, trees, and graphs), searching and sorting algorithms, and basic analysis of algorithms.

The programming language used for this course is Java.

We use very basic object-oriented programming concepts in various data structures implementations, e.g., Stack class inherits LinkedList class (more details of OOP are in CS2030).

Note: This introductory message will not be prominent the next time you visit this URL again. This behavior is normal. You can view it again by scrolling to the top of this page.

Course Registration

For AY 2025/26, Prof Halim teaches CS2040S (CS students) in S1 (since S1 AY 2023/24);
but also returning to teach CS2040C (CEG, InfoSecurity, exchange students) in S2 (last was S1 AY 2022/23).

Some facts:

  1. Prof Halim has implemented flipped classroom (a type of blended learning) techniques, employing machine-teach-(and-auto-test)-students-on-basic-stuffs, along with in-class live discussion of more challenging problems in his CS2040/C/S classes. From AY 2017/18 until the present, he has received teaching feedback ratings from 4.2 (average) to 4.8 (very good) out of a maximum of 5.0 for these offerings, with a running average rating of 4.458 (good).
  2. Apart from teaching CS2040/C/S on multiple occassions from 2017 to the present, Prof Halim has also taught similar courses that are variants of the current version of CS2040/C/S, namely CS2020 once (2011), CS2010 six times (2011-2016), CS1020E once (2016), and IT5003 ten times (2020-present).
  3. Teaching staffs:
    Associate Professor Steven Halim, the key man behind VisuAlgo, a tool that is utilized extensively in this course.
    The primary goal for this S1 AY 2025/26 is to integrate as many key/recurring/most liked/popular LeetCode tasks in this course, as LeetCode is currently one of the most popular coding interview website out there for now (in AY 2025/26).
    The secondary goal is to reduce the 'perceived course difficulty' by a bit to around [4.0..4.1] by removing the notoriously stressful Practical Exam (Prof Halim's usual favorite) component.

    Rating
    (out of 5.0)
    Aug-Nov 25
    (n=???/206)
    ≥ 50%
    Aug-Nov 24
    (n=128/161)
    80%
    Aug-Nov 23
    (n=90/128)
    70%
    Aug-Nov 22 (CS2040C)
    (n=162/206)
    79%
    Course feedback (SoC CS avg lvl 2000 ~3.9) [4.1..4.2] (tgt) 4.2 == 4.2 == 4.2
    Course difficulty (SoC CS avg lvl 2000 ~4.1) [4.0..4.1] (tgt) 4.2 (almost 4.1) 4.3 == 4.3
    Prof Halim's teaching (SoC CS avg lvl 2000 ~4.2) [4.4..4.5] (tgt) 4.5 (PB for 2040S) 4.4 4.5

    TAs:

    Date, Time Live Session (Venue) (#Stu/#Cap) No TA
    1/Mon, 1000-1200 COM1-B109 (PL2) (28/28) 01 @sure_isse
    1/Mon, 1000-1200 COM1-B108 (PL3) (24/24) 02 @junhano.o
    1/Mon, 1200-1400 COM1-B109 (PL2) (28/28) 03 @chronal_02
    1/Mon, 1200-1400 COM1-B108 (PL3) (24/24) 04 @pisciprehender
    1/Mon, 1400-1600 COM1-B108 (PL3) (24/24) 05 @mono.kanae
    1/Mon, 1400-1600 COM1-B109 (PL2) (28/28) 06 @wilkinsang
    1/Mon, 1600-1800 COM1-B108 (PL3) (24/24) 07 @ahzong
    1/Mon, 1600-1800 COM1-B109 (PL2) (26/27) 08 @chowwars
    5/Fri, 2100-2300 Zoom Recurring Link (free and easy) - various TAs

    List of TAs (ordered using Lab Group Number — Ivan is not taking any lab group):

    1. Special part-time TA only for grading midterm+final: Ivan Chew Teck Meng (not taking any lab group)
    2. @sure_isse, Sherisse Tan Jing Wen, ex CS2040S S1 AY23/24 (A-) (peak rating: 4.7/CS2040S S2 AY24/25)
    3. @junhano.o, Lew Choon Hean, ex CS3233 S2 AY24/25 (A) (peak rating: 4.5/CS2030S TA S2 AY24/25)
    4. @chronal_02, Winston Leonard Prayonggo (peak rating: 4.9/CS2040S S1 AY24/25)
    5. @pisciprehender, Zhang Puyu, ex CS2040S S1 AY23/24 (A+) (peak rating: 4.8/CS2040S S1 AY24/25)
    6. @mono.kanae, Tan Guan Qun, ex CS2040S S1 AY24/25 (A), (New TA)
    7. @wilkinsang, Ang Wei Jian, ex CS2040S S1 AY24/25 (A+), (peak rating: 4.3/CS1231S S1 AY23/24 and CS2030S S2 AY23/24)
    8. @ahzong, Chong Chin Herng (peak rating: 5.0/CS2040S S2 AY24/25)
    9. @chowwars, Chow Yuan Bin, full-time TA, but on half-load (just one lab group)
  4. Have you passed (or exempted from) CS1010 (or its variants)? You have to...
  5. For CS2040S, have you passed CS1231 (or its variants)? You have to...
  6. Have you taken CS1020/CS1020E/CS2010/CS2020? You cannot take CS2040/C/S if you have taken similar/older course(s) that have huge degree of overlap with this course.

Syllabus

This is what students learn in CS2040/C/S as taught by Prof Halim, compare it with the subset IT5003 version:

Course Registration Additional FAQ

If you have any important questions regarding this course, email dcssh at nus edu sg. Relevant answers will be posted here to reach wider audiences.

Q: Will there be a Practical Exam (PE) for your version of CS2040/C/S?
A: Starting from S1 AY2025/26, no... The weightage (that was previously for the stressful PE) will be passed to Final Assessment instead.
Q: Will this course be graded using Bell curve?
A: CS2040S has much more than 40 students each semester. Bell curve system will obviously be used.
Q: I am from CS1101S (subset of JavaScript)/CS1010S or CS1010E (Python)/other modules that do not use Java, should I pick up Java on my own before August 2025?
A: Yes, that is a very good idea. We will only review basic Java in the first few weeks of this course and then Prof Halim will encourage you to self-learn Java along the way.
Q: What Integrated Development Environment (IDE) that we will use in your version of CS2040/C/S?
A: The choice of IDE to do the bi-weekly assignments is "up to you" (as there is no PE).
Q: Do I have to buy any textbook for this course?
A: Generally, no. But my CS3233 textbook: Competitive Programming book: CP4, Book 1 (get a copy legally from lulu.com (eBook) or lulu.com (physical, need shipping from overseas)) should be a good book to have. The answers for many of my test questions may be inside that book. The problem is... I discuss over ~4900+ problems in that book, near impossible to solve them all in just one semester.
Q: Can I S/U this course if I am a freshman when I take this course?
A: No, as this is a level-2 core course. CS2040/C/S has CS1010 as pre-requisite and according to Registrar's Office: "The S/U option will apply to all Level 1000 courses (with or without pre-requisites) and Level 2000 courses without other NUS courses as pre-requisites, unless otherwise stipulated by the Faculties/Departments.". So factor this information when taking this course.
Q: I heard from my friend/senior that your version of CS2040/C/S is a flipped classroom course?
A: You heard that correctly. Get ready :).
Q: What are the potential changes that you will apply to CS2040/C/S in S1 AY 2025/26 compared to your many earlier runs of this course?
A: Prof Halim only plan to change these variables this time (all others are planned to be kept roughly constant):
  1. Prof Halim has disappeared once this semester (compared to THREE times last S1 AY 2024/25), on Week 04 (attended ICPC World Finals 2025, Baku, Azerbaijan). He was replaced by YuanBin+ChoonHean that week.
  2. Prof Halim started joining LeetCode effectively from CNY 2025. At the start of semester (Mon, 11 Aug 25), he has solved 1402 out of 3646 tasks (~38%). For the next ~15 weeks until exam period, he plans to solve ~2 tasks per day, i.e., ~1612 tasks solved (~44%). So, Prof Halim will now mix Kattis (a bit longer/story-based problem statement) and LeetCode more direct interview-style questions in class demos.
  3. [TO TRY ONE MORE TIME]: Prof Halim will try to make this course has difficulty rating in [4.0-4.1] range instead of 4.3, 4.3, 4.2, 4.2 in his last four iterations..., so let's see if removing PE helps to achieve this. The weightage of PE has to go somewhere though, so Final assessment weightage now increases from 40% to 60%...

Note: This course registration section will not be prominent from Week 1 onwards. This behavior is normal. You can view it again by scrolling to the top of this page.

News

Date News

Lesson Plan

Week Tutorial+Lab Combo Lecture Interesting Problem Set
Cells with course material that have not been updated are highlighted with pink color, past classes more than one week ago are hidden so that we can focus on the current and future classes, but you can restore them by clicking 'Show Past' button above, future classes are not highlighted
-01,
28 Jul-01 Aug
Has Not Started Has Not Started,
but please revise your CS1101S/equivalent
Prof Halim assumes that all of you have taken
or exempted from this course/its variants

Register at Kattis and LeetCode (use full name as in Matric card),
read Java specific instructions @ Kattis,
pick up basic Java by yourself,
and solve the selected Online Judge (OJ)
Problem Set 0 (PS0) by yourself (CS1101S/equivalent level)
and LeetCode OJ programming-skills study plan
(solving many 'trivial problems' from this set
---the Kattis one is trackable by Prof Halim, indirectly tells him
about your CS1101S/equivalent rough grade)

There was a CS2040 placement test
for AY25/26 incoming IOI medallists
on Wed, 30 Jul 2025 late evening Bolivia time
and Thu, 31 Jul 2025, 9-11am SGT
PS0: Easy Coding Challenges
(01-13 Aug)
Already graded to speed up
registration admins
Solve any 3 out of 10 trivial tasks for 1%
00,
04-08 Aug
Has Not Started Has Not Started
Continue attempting Kattis PS0 and LeetCode programming-skills study plan
(hints in class Discord)

Singapore National Day on Sat, 09 August 2025
PS0, continued
Remember, solve any 3 for 1%
01,
11-15 Aug
Has Not Started

Extra exercises from programming-skills:
Mon: plus-one (simulate +1 on a 'big' integer),
Tue: to-lower-case (trivial task),
Wed: robot-return-to-origin ((virtual) 2D grid traversal),
Thu: matrix-diagonal-sum (2D grid processing),
Fri: count-odd-numbers-in-an-interval-range (PIE).
01a. Course Admin, (Re-)Introduction to Java
1. Setting the tone for a flipped classroom course
VisuAlgo + this Private Canvas + Kattis (NUS) + LeetCode
2. Basic Java review/new feature introduction
3. Kattis/LeetCode problem(s) discussed today:
A few PS0 and/or programming-skills problems (just for warm-up)

In the middle of 01a: VisuAlgo Online Quiz 0 (0%)
There was 1 trivial question during the first lecture
Bring your own laptop
This one is put here to speed-up admins (don't skip the first lecture)

Reminder: Read simple algorithms on unsorted array
(Slide 1 to 6-1) before the next lecture

01b. Algorithms on Unsorted Array
Kattis/LeetCode problem(s) discussed today:
rankproblem (a List ADT task; Java ArrayList operations:
add (2 versions), indexOf, remove; and using Java class)

Reminder: Read sorting intro, algorithm analysis,
and O(N^2) sorting algorithms
(Slide 1 to 9-3)
before the next lecture
PS0 (1%)
Due: Wed, 13 Aug 25, 11.29am

PS1: Basic Programming
Out: Wed, 13 Aug 25, 11.30am
Mentioned at the end of the first lecture
CS2040S students do problem B+C
problem A is optional (extra (easy) practice)
02,
18-22 Aug
Has Not Started

Next exercises mostly from programming-skills again:
Mon: monotonic-array (a monotonic array is a sorted array),
Tue: spiral-matrix (interesting 2D grid traversal variant),
Wed: robot-bounded-in-circle (a bit harder than robot-return-to-origin),
Thu: shortest-unsorted-continuous-subarray (discussed in CS2040S Lec02b),
Fri: average-salary-excluding-the-minimum-and-maximum-salary (just do it).

But (e-)Consultation starts
from Fri, 22 Aug
Focus on PS1B+C late birds discussion
02a. Analysis of Algorithms (Slide 1 to 9-3)
1. Live SpeedTest.cpp | py | java demo
(measure runtime, count # of operations, vs asymptotic analysis)
2. Fast review of O(N^2) sorting algorithms
3. Kattis/LeetCode problem(s) discussed today:
thanos (analysis: exponential growth, logarithmic steps)
mjehuric (bubble sort simulation)
height (insertion sort simulation)
nothanks (sorting library and linear pass)

02b. Algorithms on Sorted Array
Kattis/LeetCode problem(s) discussed today:
classfieldtrip (merge of mergesort; or any other solution that works)
shortest-unsorted-continuous-subarray (O(n log n) vs O(n) solutions)

Last flipped classroom reminder:
Read all sorting e-Lecture slides before next lecture
PS1 (2%)
Due: Sat, 23 Aug 25, 07.59am

PS2: Sorting-related Problems
Out: Sat, 23 Aug 25, 08.00am
03,
25-29 Aug
T01+L01: tut01.pdf
Introduction,
OOP review (List ADT, ListArrayTest.py | java)
Algorithm Analysis,
Hands-on, a basic List ADT task,
PS1 Debrief (short),
PS2 Discussion (algorithmic)

Extra exercises:
Mon: kids-with-the-greatest-number-of-candies (simple exercise),
Tue: merge-strings-alternately (discussed in Lec03a),
Wed: sort-colors (discussed in Lec03a),
Thu: find-the-highest-altitude (discussed in CS2040S Lec03b),
Fri: product-of-array-except-self (may help to solve something in PS2).
03a. Sorting (Slide 10 to 13-2)
1. O(N log N) Merge Sort (C++ stable_sort; Java Collections.sort; Python list.sort)
2. Exp O(N log N) (Rand) Quick Sort (C++ sort; Java Arrays.sort (primitives); N/A in Python)
Sorting Online Quiz (easy)
White-box: SortingDemo.cpp | py | java
Black-box: Java Collections.sort, Arrays.sort (object), Arrays.sort (primitives)
3. Kattis/LeetCode problem(s) discussed today:
sortofsorting (custom comparator, stable sorting library)
merge-strings-alternately (variant of merge of Merge sort)
sort-colors (Dutch National Flag problem)

03b. Sorting Extras (until end)
A preview of Ω(N log N) lower-bound of comparison-based sorting algorithms
Special-purpose O(N) sorting algorithm: Counting Sort (Only)
Other topics of sorting, e.g., counting inversions, counting minimum swaps
Kattis/LeetCode problem(s) discussed today:
find-the-highest-altitude (prefix sum, for PS2)
PS2, continued
04,
01-05 Sep
T02+L02: tut02.pdf
Sorting Application(s),
Sorting, mini experiment,
QuickSelect,
ADT/List ADT,
VA OQ demo (sorting),
Hands-on, sorting applications,
PS2 Discussion (algorithmic)

Extra Exercises:
Mon: can-make-arithmetic-progression-from-sequence (sort first),
Tue: design-linked-list (try adapting SLLDemo (Lec03a) to solve this),
Wed: delete-the-middle-node-of-a-linked-list (discussed in CS2040S Lec04b),
Thu: removing-stars-from-a-string (discussed in CS2040S Lec04b),
Fri: add-two-numbers (the second LeetCode problem).
Prof Halim was at Baku, Azerbaijan,
for the 2025 ICPC World Finals
.
Lec04a was delivered by Chow Yuan Bin.
Lec04b was delivered by Lew Choon Hean.

04a. List ADT: SLL/Stack/Queue/DLL/Deque (all slides)
1. Introducing List ADT, (resizeable) array versus Singly Linked List (SLL) way
2. Introducing Stack/Queue ADT
3. Wrapping up with DLL and Deque ADT
Linked List Online Quiz (easy)
White-box: SLLDemo.cpp | py | java implementation
Black-box: Stack, but using Java ArrayList implementation versus Java LinkedList and Stack classes
Fixed-size array, circular array version, versus Java Queue and Deque interfaces
Kattis/LeetCode problem(s) discussed today: N/A

04b. List Extras
Kattis/LeetCode problem(s) discussed today:
delete-the-middle-node-of-a-linked-list (two passes versus two pointers strategies)
removing-stars-from-a-string (bracket matching variant)
PS2 (2%)
Due: Sat, 06 Sep 25, 07.59am

PS3: List+PQ Problems
Out: Sat, 06 Sep 25, 08.00am
05,
08-12 Sep
T03+L03: tut03.pdf
Linked List, mini experiment,
Applications: Reversing/Sorting a List,
Application: Stack-related,
PS2 Debrief (short),
Java LinkedList/Stack/Queue/Deque,
VA OQ demo (list),
Hands-on, a list application,
PS3 Discussion (algorithmic)

Extra Exercises:
Mon: merge-two-sorted-lists (merge of Merge Sort; on two SLLs),
Tue: reverse-linked-list (there are several ways to do this),
Wed: kth-largest-element-in-an-array (discussed in Lec05a),
Thu: smallest-number-in-infinite-set (discussed in CS2040S Lec05b),
Fri: remove-stones-to-minimize-the-total (max PQ simulation).
05a. Priority Queue (PQ) ADT: Binary Heap (Slide 1 to 8-2)
1. Introducing PQ ADT
2. Introducing basic Binary Heap structure and its Insert+ExtractMax operations
3. Discussing CreateHeap (two versions) and HeapSort operations
Binary Heap Online Quiz (easy)
White-box: BinaryHeapDemo.cpp | py | java
Black-box: priority_queue.cpp | py | java
Kattis/LeetCode problem(s) discussed today:
kth-largest-element-in-an-array (O(n log k) version)

Last 15m of 05a: VisuAlgo Online Quiz 1 (4%)
Bring your own laptop that can run at least 15 minutes on battery power.
(we do not provide any spare laptop).
Material: /array (1Q + 2 'new'), /sorting (3 Qs), /list (3 Qs),
and 3 'new' questions especially on asymptotics.

05b. PQ Extras (until end)
1. O(N) CreateHeap analysis and O(N+K log N) PartialSort
2. Discussing UpdateKey(i, newv) and Delete(i) operations
Kattis/LeetCode problem(s) discussed today:
smallest-number-in-infinite-set (min PQ simulation; with lazy deletion)
PS3, continued
06,
15-19 Sep
T04+L04: tut04.pdf
Binary Heap,
Max-Min conversion,
Additional ADT PQ Operations,
Java PriorityQueue,
VA OQ demo (heap),
Hands-on, a problem involving PQ,
PS3 last Discussion (algorithmic)

Extra exercises:
Mon: total-cost-to-hire-k-workers (min PQ simulation),
Tue: design-hashmap (try adapting HashTableDemo (Lec06a) to solve this),
Wed: longest-consecutive-sequence (discussed in Lec06a),
Thu: group-anagrams (discussed in CS2040S Lec06b),
Fri: unique-number-of-occurrences (set application).
06a. Table ADT part 1: Hash Table (slide 1 to 10-5)
1. Table ADT, DAT, Basic Hashing; Easiest Collision Resolution (CR): CA (SC)
HashTableDemo.cpp | py | java (all use SC)
2. More CR Techniques: OA (LP, QP, DH); Comparing CA: SC with OA: DH
Hash Table Online Quiz (easy; a bit too tedious on medium/hard settings)
3. Kattis/LeetCode problem(s) discussed today:
design-hashmap (use HashTableDemo)
longest-consecutive-sequence (use set to help checks)

06b. Hash Table Extras (until end)
Other technicalities of Hash Table
Java HashSet/HashMap/Hashtable classes
See unordered_map_unordered_set.cpp | py | java at GitHub repo of CPbook website
Kattis/LeetCode problem(s) discussed today:
group-anagrams (sort and hash)
PS3 (2%)
Due: Sat, 20 Sep 25, 07.59am

PS4: Hash Table Problems
Out: Sat, 20 Sep 25, 08.00am
Recess Week, 20-28 Sep 2025
You can take a break this week :)
07,
29 Sep-03 Oct
T05+L05: tut05.pdf [Special]
Past midterm paper(s) discussions

Extra exercises:
Mon: find-k-pairs-with-smallest-sums (discussed in Lab05),
Tue: min-stack (CS2040S midterm S1 AY23/24, Part B),
Wed: last-stone-weight (IT5003 Final S2 AY24/25, but n *= 10000),
Thu: find-the-difference-of-two-arrays (use set),
Fri: making-a-large-island (to find an easy enough hard :O UFDS LC task).
Midterm Test (10%)
Venue: MPSH5
Date and Time: Wed, 01 Oct 25 (wk7), 10:15-11:25am (70 mins)
Hall entry time earliest by 09:45am
Hall exit time latest by 11:55am
Open book
Three essay questions (with partial marks scheme) and one special box
Material: Up to PQ (L05ab on Week 05 + T05+L05 on Week 07), NO Hash Table yet
A few special needs students do the test at SR@LT19
O(1) SEATING PLAN: sorted names -> [1..206] [101..306]

Midterm Test Past Papers (recent 3 AYs only):
AY 2023/24: S1-midterm.pdf, [I didn't teach CS2040S in S2],
AY 2024/25: S1-midterm.pdf, [I didn't teach CS2040S in S2],
AY 2025/26: S1-midterm.pdf, [I will teach CS2040C in S2].

07b. Union-Find Disjoint Sets (all slides)
Quick Recap with VisuAlgo
See unionfind_ds.cpp | py | java at GitHub repo of CPbook website
Kattis/LeetCode problem(s) discussed today:
tildes (basic UFDS task)
PS: UFDS is reused in Connected Component (CC) and MST topics
PS4, continued
08,
06-10 Oct
T06+L06: tut06.pdf
Table ADT 1 - unordered,
Basic hashing concepts,
Hash Table issues,
Java HashSet/HashMap,
PS3 Debrief (short),
Only for CS2040S: UFDS review,
VA OQ demo (hashtable,ufds),
Hands-on, a hash table application
PS4 Discussion (algorithmic)

Extra exercises:
Mon: determine-if-two-strings-are-close (discussed in Lab06),
Tue: search-in-a-binary-search-tree (discussed in Lec08a),
Wed: delete-node-in-a-bst (discussed in Lec08a),
Thu: minimum-absolute-difference-in-bst (discussed in Lec08b),
Fri: validate-binary-search-tree (recursive check).
08a. Table ADT part 2: BST (Slide 1 to 12-1)
1. BST concepts, BST operations, and the multiset idea
BST (only) Online Quiz (medium)
BSTDemo.cpp | py | java
2. Randomly built BST and a preview of balanced BST, e.g., AVL Tree
3. Kattis/LeetCode problem(s) discussed today:
search-in-a-binary-search-tree (implement what we discuss today)
delete-node-in-a-bst (implement the three cases)

08b. Balanced BST and Applications (until end)
QnA about AVL Tree concepts
A short discussion of Select and Rank operations
BST+AVL Online Quiz (hard; need to clear pre-req)
AVL.cpp | (no py yet) | java
Java TreeSet/TreeMap classes
See map_set.cpp | (no built-in py) | java at GitHub repo of CPbook website
Kattis/LeetCode problem(s) discussed today:
minimum-absolute-difference-in-bst (use the correct tree traversal)
PS4 (2%)
Due: Sat, 11 Oct 25, 07.59am

PS5: Combo DS Problems
Out: Sat, 11 Oct 25, 08.00am
09,
13-17 Oct
T07+L07: tut07.pdf
Table ADT 2 - ordered,
(balanced) BST advanced stuffs: Select and Rank,
PQ ADT alternative implementation,
Comparison with Table ADT 1: unordered vs ordered,
Java TreeSet/TreeMap,
PS4 Debrief (short),
VA OQ demo (bst or avl (need to clear pre-req))
Hands-on, a tree-related task,
PS5 Discussion (algorithmic)

Extra exercises:
Mon: construct-binary-tree-from-preorder-and-inorder-traversal (discussed in Lab07),
Tue: maximal-network-rank (simple graph DS task),
Wed: destination-city (discussed in Lec09a),
Thu: keys-and-room (discussed in Lec09b),
Fri: reorder-routes-to-make-all-paths-lead-to-the-city-zero (custom traversal).
09a. Graph DS (all slides) + DFS Traversal (Slide 1 to 5-8)
1. Concept checks: Graph DS Online Quiz (medium),
Implementations of graph DS and its applications
No built-in C++ STL container | Python standard library | Java API,
See graph_ds.cpp | py | java at GitHub repo of CPbook website,
2. Early discussion of the basic forms of Graph Traversal algorithms: DFS first
See dfs_cc.cpp | py | java
3. Kattis/LeetCode problem(s) discussed today:
destination-city (degree checks)

Last 15m of 09a: VisuAlgo Online Quiz 2 (4%)
Material: /heap (3 Qs), /hashtable (3 Qs), /ufds (3 Qs), /bst (3 Qs)
but NO new question this time...

09b. Graph Traversal Applications (Slide 7-3 to 7-8)
Finding Connected Components
Kattis/LeetCode problem(s) discussed today:
weakvertices (AM demo)
keys-and-room (visitation check from 0)
PS5, continued
10,
20-24 Oct
As Mon, 20 Oct 2025 is Deepavali PH
and Tue, 21 Oct 2025 is NUS well-being day
We move our last three downwards

Extra exercises:
Mon: maximum-depth-of-binary-tree (recursive check; precursor of DFS),
Tue: count-good-nodes-in-binary-tree (modified preorder; precursor of DFS),
Wed: number-of-provinces (discussed in Lec10a),
Thu: course-schedule (discussed in Lec10b),
Fri: binary-tree-right-side-view (BFS on a binary tree).
10a. Graph Traversal Applications (Slide 6 to 7-12)
1. Review DFS and introducing BFS
2. Focus on a few more basic DFS/BFS applications
(we skip slide 8-11, out of CS2040/C/S and IT5003 scope)
DFS/BFS Online Quiz (medium)
No built-in C++ STL algorithm | Python standard library | Java API,
See UVa00469.cpp | py | java, and
bfs.cpp | bfs.py | java at GitHub repo of CPbook website,
3. Kattis/LeetCode problem(s) discussed today:
number-of-provinces (AM; count #CC; DFS or BFS way)

10b. Graph Traversal Extras
Kattis/LeetCode problem(s) discussed today:
course-schedule (check if the graph is acylic)
builddeps (AL of Strings + postorder DFS toposort demo)

NUS Online Teaching Feedback opens this Fri
But this timing is too early for our course...
You can wait until you have completed the course
PS5, continued
11,
27-31 Oct
T08+L08: tut08.pdf
Graph DS Review,
Some Graph Properties Discussion,
Graph DS Conversion Exercise,
DFS/BFS Review,
Custom graph DS implementation review,
VA OQ demo (graphds,dfsbfs),
Hands-on, a Graph-related task,
PS5 Discussion (algorithmic)

Extra exercises:
Mon: course-schedule-ii (discussed in Lab08),
Tue: rotting-oranges (discussed in Lec11a),
Wed: network-delay-time (discussed in Lec11a),
Thu: snakes-and-ladders (discussed in Lec11b),
Fri: nearest-exit-from-entrance-in-maze (BFS on grid).
11a. SSSP Problem (all slides)
1. Review of basic SSSP problem + O(VE) / O(kE) Bellman-Ford algorithm
2. QnA on BFS algorithm for unweighted SSSP
QnA on Dijkstra's algorithm (original Dijkstra's first;
but focus on modified Dijkstra's for IT5003)
See dijkstra.cpp | py | java at GitHub repo of CPbook website
Quick discussion of SSSP on Tree and on DAG
SSSP Online Quiz (medium)
3. Kattis/LeetCode problem(s) discussed today:
rotting-oranges (SSSP; implicit unweighted grid graph; BFS)
network-delay-time (basic Dijkstra's)

11b. SSSP Extras
Now CS2040S side discuss Modified Dijkstra's
Other special cases of SSSP problem
Kattis/LeetCode problem(s) discussed today:
snakes-and-ladders (SSSP; implicit unweighted grid graph; BFS; harder)
PS5 (2%)
Due: Sat, 01 Nov 25, 07.59am

PS6: Graph(-Related) Problems
Out: Sat, 01 Nov 25, 08.00am
12,
03-07 Nov
T09+L09: tut09.pdf
DFS/BFS advanced stuffs:
Cycle Detection, Toposort++, Floodfill/CC, Bipartite Graph Checker
Modeling exercise,
PS5 Debrief (short),
VA OQ demo (dfsbfs,sssp),
Hands-on, an unweighted SSSP task,
PS6 Discussion (algorithmic)

Extra exercises:
Mon: minimum-genetic-mutation (discussed in Lab09),
Tue: check-knight-tour-configuration (classic BFS),
Wed: min-cost-to-connect-all-points (discussed in Lec12a),
Thu: minimum-time-to-visit-disappearing-nodes (discussed in Lec12b),
Fri: ugly-number-ii (Min Priority Queue + Hash Table Review).
12a. MST Problem (all slides)
1. Review of basic MST problem
2. QnA on Kruskal's and Prim's algorithms
Mix and Match of various data structures/algorithms covered so far
3. Kattis/LeetCode problem(s) discussed today:
min-cost-to-connect-all-points (basic MST)
Onsite class photo as momento

Last 15m of 12a: VisuAlgo Online Quiz 3 (4%)
Material: /graphds (4 Qs), /dfsbfs (3 Qs), /sssp (2 Qs),
and 3 'new' questions (inclusive of 2 specifically unweighted SSSP).

12b. MST+another SSSP Extras
Other MST Variants
Kattis/LeetCode problem(s) discussed today:
minimum-time-to-visit-disappearing-nodes (SSSP on weighted graph; with a small twist)
PS6, continued
13,
10-14 Nov
T10+L10: tut10.pdf
BFS/Dijkstra's review
Only for CS2040S: MST review,
Modeling exercises (continued),
VA OQ demo (sssp),
Hands-on, an SSSP task,
PS6 Discussion (algorithmic)

Extra exercises:
Mon: map-sum-pairs (Hash Table Review),
Tue: flatten-binary-tree-to-linked-list (Skewed Right BST (LL) Review),
Wed: minimum-number-of-vertices-to-reach-all-nodes (Graph DS and Kahn's Algorithm Review),
Thu: number-of-islands (Graph Traversal (on Grid) Review),
Fri: map-of-highest-peak ((unweighted) SSSP Review).

Tut+Lab participation marks given (5%)
13a. No lecture, make-up time window
Make-up for VA OQ 1 (10 pax),
9.45-10.00am
Make-up for VA OQ 2 (7 pax; has 2 overlap with VA OQ 1)
10.00-10.15am
Make-up for Midterm (6 pax; has 3 overlap with VA OQ 1+2)
10.15-11.25am
Make-up for VA OQ 3 (? pax)
10.15-10.30am (if NO overlap with above)
11.25-11.40am (otherwise)
(other details TBC)

13b. The Last Lecture
Course wrap-up et al:
Undoing all the illegal Java coding techniques,
Semester summary via,
Review of what can be done better for future iterations,
Advertisement of future (algorithm) courses: CS3230 (S1 or S2)
Advertisement for part-time TA jobs (A-/A/A+ only),
Ending: a few Final Assessment Tips.
PS6 (2%)
Due: Sat, 15 Nov 25, 07.59am
Study Week, 15-21 Nov 2025

Final Assessment Discussions at Class Discord
Final Assessment Past Papers (recent 3 AYs only, note the transition from CS2040C/C++ to CS2040S/Java):
AY 2022/23: S1-final.pdf, [I didn't teach CS2040C in S2],
AY 2023/24: S1-final.pdf, [I didn't teach CS2040S in S2],
AY 2024/25: S1-final.pdf, [I didn't teach CS2040S in S2],
AY 2025/26: S1-final.pdf (will be our paper), [I will teach CS2040C in S2].

NUS Online Teaching Feedback System closes on Friday of Study Week
Final Assessment (60%)
Date and Time: Thu, 27 Nov 2025, 01.00-03.00pm
Venue: MPSH5 (invigilators: Prof Halim, 3 TAs: Yuan Bin, Hian Wee, Jin Pei) + COM3-01-23 (a few special needs + TA: Desmond)
Open book
No electronic device except one non-programmable calculator
6x1 = 6 marks are MCQs (very tricky; do not start from MCQ section; but do not leave any MCQ blank either)
Then 6 application questions (essays)
The first essay question will be very trivial, worth "free" 9 marks; do this one first and if scored (expected ≤ 5 minutes for A/A+ students), will give most students 9% worth of points, so anyone with CA marks ≥ 31.0/40.0 can pass this course a few minutes after final assessment starts
Then there will be four medium tasks of mostly second half topics, worth 4x10 = 40 marks
The last essay question will be very hard and worth the last 5* marks (VERY STRICT marking scheme: free 0.5 mark if left blank, 0 if wrong)