Valid for a single buy-sell cycle The problem asks for the maximum possible profit from one purchase and one sale. A dynamic programming approach tracks two states for each day: cash_with_stock[i]: the largest amount of cash achievable on day i while holding the stock. cash_without_stock[i]: the lar...
Permutation Generation Generating permutations is a foundational DFS application. By treating each selection step as a level in a tree, we can explore all possible orderings. import java.util.Scanner; public class Permutations { private static int[] sequence = new int[12]; private static boolean[] s...
The objective is to partition an m by n rectangular cake into 1x1 unit squares with the least total cost. Each horizontal cut between rows i and i+1 incurs a cost of horizontalCut[i]. Each vertical cut between columns j and j+1 incurs a cost of verticalCut[j]. The total cost is the sum of all cut co...
Merging Two Sorted Arrays Approach: Use two pointers starting from the end of both arrays and fill the result array from the end to avoid overwriting. Implementation: class ArrayMerger { public void combineSortedArrays(int[] primary, int size1, int[] secondary, int size2) { int position = primary.le...
A - Antenna Analysis The mathematical expression can be decomposed into two separate components: #include <iostream> #include <queue> #include <vector> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, c; cin >> n >> c; priority_que...
1. Selection SortThe algorithm divides the input list into two parts: a sorted sublist built up from left to right, and the remaining unsorted items. During each iteration, the smallest element from the unsorted section is identified and swapped into its correct position at the end of the sorted sub...
Prefix Sum Fundamentals The prefix sum technique converts range sum queries from O(n) per query to O(1) by preprocessing the array once. Given an array of n integers and m queries asking for the sum of elements between indices l and r (inclusive), the naive approach processes each query by iterating...
Longest Increasing Subsequence To determine the length of the longest strictly increasing subsequence, dynamic programming is applied where dp[i] represents the length of the longest subsequence ending at index i. class Solution { public: int lengthOfLIS(vector<int>& sequence) { int size =...
The foundation of efficient search operations relies on the divide-and-conquer principle applied to monotonic or structured datasets. The standard implementation maintains two pointers, typically left and right, converging toward a target state. To prevant infinite loops and ansure precise boundary...
When processing sorted arrays where elements may appear multiple times, enforcing a maximum occurrence limit requires a two-pointer technique. The objective is to compact the sequence so that no value repeats more than twicee, achieving this modification within the original memory bounds with out au...