# CSPT23 Lecture 4
## [Find Pivot Index](https://leetcode.com/problems/find-pivot-index/)
```
class Solution:
"""
nums = [1,7,3,6,5,6]
output = 3
nums = [1,2,3]
output = -1
nums = [1]
output = 0
nums = [0,0,0]
output = 0
Plan
Brute-force O(n^2)
For each number, check if they're the pivot index by summing
all the elements to its left and right and checking if they're equal
Optimal Approach O(n)
Manually keep track of leftSum and rightSum as you go through
left to right. Add previous element to leftSum, decrease rightSum
by the current element. The pivot index is when leftSum == rightSum.
nums = [1,7,3,6*,5,6]
leftSum = 11
rightSum = 11
i = 3
"""
def pivotIndex(self, nums: List[int]) -> int:
leftSum = 0
rightSum = sum(nums)
for (i, num) in enumerate(nums):
if i - 1 >= 0:
leftSum += nums[i - 1]
rightSum -= num
if leftSum == rightSum:
return i
return -1
def bruteForcepivotIndex(self, nums: List[int]) -> int:
for i, num in enumerate(nums):
leftSum = self.getLeftSum(i, nums)
rightSum = self.getRightSum(i, nums)
if leftSum == rightSum:
return i
return -1
def getLeftSum(self, i, nums):
if i == 0:
return 0
currSum = 0
for j in range(i):
currSum += nums[j]
return currSum
def getRightSum(self, i, nums):
if i == len(nums) - 1:
return 0
currSum = 0
for j in range(i + 1, len(nums)):
currSum += nums[j]
return currSum
```
## [Add One](https://leetcode.com/problems/plus-one/)
```
class Solution:
"""
[1,2,3]-->[1,2,4]
[1,2,9]-->[1,3,0]
[0]-->[1]
[9,9]-->[1,0,0]
Plan
Start from right most digit and add one
Keep going to the left if there's a carry
If there's no carry then you don't need to go through the other left digits
"""
def plusOne(self, digits: List[int]) -> List[int]:
carry = 1
i = len(digits) - 1
while i >= 0:
if carry == 0:
return digits
currSum = digits[i] + carry
carry = currSum // 10
digits[i] = currSum % 10
i -= 1
if carry > 0:
digits.insert(0, carry)
return digits
```