|
35 | 35 | - [Graphs](#-graphs)
|
36 | 36 | - [Matrix (2D Arrays)](#-matrix-2d-arrays)
|
37 | 37 | 3. [Algorithms](#-algorithms)
|
38 |
| - - [Related Techniques and Tricks](#-related-techniques-and-tricks) |
| 38 | + - [Techniques and Tricks](#-techniques-and-tricks) |
39 | 39 | - [Recursion](#-recursion)
|
40 | 40 | - [The Gauss' Trick](#-the-gauss-trick)
|
| 41 | + - [Related to Arrays](#-related-to-arrays) |
| 42 | + - [Kadane's Algorithm](#-kadanes-algorithm) |
41 | 43 | - [Sorting](#-sorting)
|
42 | 44 | - [Bubble Sort](#-bubble-sort)
|
43 | 45 | - [Selection Sort](#-selection-sort)
|
@@ -1646,14 +1648,14 @@ The structure of a 2D array allows for efficient access, modification, and trave
|
1646 | 1648 | # 🟪 Algorithms
|
1647 | 1649 |
|
1648 | 1650 | <p align="center">
|
1649 |
| - <a href="#-related-techniques-and-tricks">Related Techniques and Tricks</a> • |
| 1651 | + <a href="#-techniques-and-tricks">Techniques and Tricks</a> • |
1650 | 1652 | <a href="#-sorting">Sorting</a> •
|
1651 | 1653 | <a href="#-searching">Searching</a>
|
1652 | 1654 | </p>
|
1653 | 1655 |
|
1654 | 1656 | <br>
|
1655 | 1657 |
|
1656 |
| -## 🔶 Related Techniques and Tricks |
| 1658 | +## 🔶 Techniques and Tricks |
1657 | 1659 |
|
1658 | 1660 | ### 🔷 Recursion
|
1659 | 1661 |
|
@@ -1836,6 +1838,67 @@ S = (n / 2) * (a + l);
|
1836 | 1838 |
|
1837 | 1839 | </details>
|
1838 | 1840 |
|
| 1841 | +<br> |
| 1842 | + |
| 1843 | +### 🔷 Related to Arrays |
| 1844 | + |
| 1845 | +#### 🔻 Kadane's Algorithm |
| 1846 | + |
| 1847 | +Kadane's Algorithm is an efficient `O(n)` method to find the maximum sum of a contiguous subarray in a given array. |
| 1848 | + |
| 1849 | +> The main logic: If adding the next number improves the sum, keep going. Otherwise, start fresh from the next number. |
| 1850 | +
|
| 1851 | +<br> |
| 1852 | + |
| 1853 | +Examples: |
| 1854 | + |
| 1855 | +<p align="center"> |
| 1856 | + <img src="./kd.png" height="auto" width="250"> |
| 1857 | +</p> |
| 1858 | + |
| 1859 | +- Without Kadane’s Algorithm: `O(n^2)` |
| 1860 | + |
| 1861 | + ```js |
| 1862 | + function maxSubArray(arr) { |
| 1863 | + let maxSum = arr[0]; |
| 1864 | + |
| 1865 | + for (let i = 0; i < arr.length; i++) { |
| 1866 | + let currentSum = 0; |
| 1867 | + |
| 1868 | + for (let j = i; j < arr.length; j++) { |
| 1869 | + currentSum += arr[j]; |
| 1870 | + maxSum = Math.max(maxSum, currentSum); |
| 1871 | + } |
| 1872 | + } |
| 1873 | + |
| 1874 | + return maxSum; |
| 1875 | + } |
| 1876 | + |
| 1877 | + maxSubArray([-2, -3, 4, -1, -2, 1, 5, -3]); // 7 |
| 1878 | + ``` |
| 1879 | + |
| 1880 | +- With Kadane’s Algorithm: `O(n)` |
| 1881 | + |
| 1882 | + ```js |
| 1883 | + function maxSubArray(arr) { |
| 1884 | + let maxSum = arr[0]; |
| 1885 | + let currentSum = 0; |
| 1886 | + |
| 1887 | + for (let num of arr) { |
| 1888 | + currentSum += num; |
| 1889 | + maxSum = Math.max(maxSum, currentSum); |
| 1890 | + |
| 1891 | + if (currentSum < 0) { |
| 1892 | + currentSum = 0; |
| 1893 | + } |
| 1894 | + } |
| 1895 | + |
| 1896 | + return maxSum; |
| 1897 | + } |
| 1898 | + |
| 1899 | + maxSubArray([-2, -3, 4, -1, -2, 1, 5, -3]); // 7 |
| 1900 | + ``` |
| 1901 | + |
1839 | 1902 | <p align="right">
|
1840 | 1903 | <a href="#data-structures--algorithms">back to top ⬆</a>
|
1841 | 1904 | </p>
|
|
0 commit comments