# Solving Leetcode Interviews in Seconds with AI: Greatest Sum Divisible by Three


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "1262" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> Given an integer array nums, return the maximum possible sum of elements of the array such that it is divisible by three.   Example 1:  Input: nums = [3,6,5,1,8] Output: 18 Explanation: Pick numbers 3, 6, 1 and 8 their sum is 18 (maximum sum divisible by 3). Example 2:  Input: nums = [4] Output: 0 Explanation: Since 4 is not divisible by 3, do not pick any number.  Example 3:  Input: nums = [1,2,3,4,4] Output: 12 Explanation: Pick numbers 1, 3, 4 and 4 their sum is 12 (maximum sum divisible by 3).    Constraints:  1 <= nums.length <= 4 * 104 1 <= nums[i] <= 104  

	# Explanation
	Here's a solution to the problem, designed for efficiency and optimality:

*   **Dynamic Programming:** Use dynamic programming to track the maximum sum achievable for each possible remainder (0, 1, and 2) when dividing by 3.
*   **Iterative Update:** Iterate through the input array, updating the DP table at each step to reflect the inclusion of the current number in the sum.
*   **Modulo Arithmetic:** Efficiently calculate remainders using the modulo operator (%) to determine the appropriate DP table updates.

*   **Runtime Complexity:** O(n), where n is the length of the input array. **Storage Complexity:** O(1) (constant space).

	
	# Code
	```python
	def maxSumDivisibleByThree(nums):
    """
    Finds the maximum sum of elements in the array that is divisible by three.

    Args:
        nums: A list of integers.

    Returns:
        The maximum sum divisible by three.
    """

    dp = [0, float('-inf'), float('-inf')]  # dp[i] is max sum with remainder i

    for num in nums:
        temp_dp = dp[:]  # Create a copy to avoid overwriting previous states
        remainder = num % 3

        dp[0] = max(temp_dp[0], temp_dp[(3 - remainder) % 3] + num)
        dp[1] = max(temp_dp[1], temp_dp[(4 - remainder) % 3] + num)
        dp[2] = max(temp_dp[2], temp_dp[(5 - remainder) % 3] + num)

    return dp[0]
	```
			
