💯 The Algorithm of Success: Technical Talent in Venture Capital

Day 3 : 1137. N-th Tribonacci Number

In partnership with

TLDR

  1. Welcome!

  2. Hello from the VC world with Julia Ianni!

  3. 1137. N-th Tribonacci Number

  4. Recommendations I live by!

  5. Resources to check out - by Julia

  6. Self hacks of the week - by Julia

  7. JOBS & SCHOLARSHIPS

Hi and welcome back, brave human!

Today's post is very special!!!!! 🤩 🤩 🤩 

Today, we're exploring Investment Banking and Venture Capital, and how software engineers fit into these financial worlds. While investment bankers provide financial advice to established companies, venture capitalists search for promising startups to invest in. Both understand how the financial success of the company is impacted by their tech stack.

And we've got an amazing guest who knows both worlds inside out!

Let me introduce you to Julia Ianni, whom I had the pleasure of talking with and asking some questions.

With a background as an Investment Banker, Venture Capitalist and Startup Executive, Julia brings her wealth of knowledge to an audience that spans from students to CEOs. She's known for sharing practical, no-nonsense advice on navigating the VC/ startup ecosystem and how to develop your mindset to reach your full potential!

You can find more of her insights on TikTok and Instagram !!

Now, let’s dive into her wisdom!

VC is like a small, connected world

When Julia entered the Venture Capital world one thing that surprised her was just how much of a small ecosystem it really is. She explained to me that most people know each other and if you ever need an introduction, chances are, you’ll find someone who can connect you.

But here’s where it gets interesting. Because the ecosystem is so small, word spreads fast. That’s why Julia emphasizes the importance of investing in your relationships. Connections are everything!!, and building trust within your network is crucial for success.

So, for anyone curious about VC, and I would say especially for software engineers looking to break into this space, take note: relationships matter more than you think!

How to cut through the AI Hype?

Now it looks like AI is everywhere, especially in startups. But how do you tell the ones with real potential from those just riding the hype?

Julia tells us “one of the telling signs is if a product is just a GPT wrapper”. That means, the startup's tool or service relies entirely on ChatGPT as its core. The problem? These products have no MOATs (competitive advantage), lack differentiation and are easier to copy. Plus! The dependency on OpenAI / ChatGPT is a major risk.

Those that are creating proprietary technology, not just building wrapper tools, are the real game-changers.

Breaking into VC as a SWE

If you're a SWE thinking about transitioning into VC:

  • There's high demand for technical talent, especially at Seed and Series A stage funds, where understanding technology and developer pain points is key. So…

  • Work as a software engineer first: Julia suggests gaining a few years of experience to bring valuable technical insights to a VC fund. During this time you should…

  • Network with early-stage companies: Connect with other engineers at startups, as many go on to start their own companies or join others, creating deal flow opportunities before joining a fund.

Bringing technical expertise to the table makes you very valuable in VC!!!!!!

LeetCode problem

The Tribonacci sequence Tn is defined as follows: 

T0 = 0, T1 = 1, T2 = 1, and Tn+3 = Tn + Tn+1 + Tn+2 for n >= 0.

Given n, return the value of Tn.

Before we get started let's take a deep breath

It took me some good time to wrap my head around this problem, so let’s take it step by step!

⚠️ ⚠️ ⚠️ The most important thing is that this is not a Fibonacci sequence it is a Tribonacci sequence. ⚠️ ⚠️ ⚠️ 

This is a generalization of the Fibonacci sequence, where each element is the sum of the previous three elements.

This means that for our base case we will need the first three elements!

Alright, let’s break it down together before we dive into the code.

  • What are we asked? The nth element of the Tribonacci sequence

  • What do we need to calculate each element? Sum of previous 3 elements

  • What are our base cases? T0 = 0, T1 = 1, T2 = 1

Let's look at an example with n = 6.

The sequence builds up like this::

  1. We start with: [0, 1, 1]

  2. T3 = 0 + 1 + 1 = 2

  3. T4 = 1 + 1 + 2 = 4

  4. T5 = 1 + 2 + 4 = 7

  5. T6 = 2 + 4 + 7 = 13

So for n = 6, the answer would be 13!

If we recursively calculate each element by calculating the previous three elements it, we would get the job done 🤙 but suuuuuuper slowly and hit a time limit! But we are getting there!!

We will use dynamic programming to solve this problem. If you need a refresher from the last problem.

Top-Down Approach

There's a very basic template for most top-down recursive approaches!

  1. Base case: Define when to stop recursion (at the smallest subproblems)!

  2. Memoization: If computation was previously done and stored, just retrieve it!

  3. Formula: If computation wasn't done before, compute and save result!

For example, with n = 6: Break down the problems:

  • dp[6] = dp[5] + dp[4] + dp[3]

  • dp[5] = dp[4] + dp[3] + dp[2]

  • dp[4] = dp[3] + dp[2] + dp[1]

  • dp[3] = dp[2] + dp[1] + dp[0]

  • dp[2] = 1 (base case)

  • dp[1] = 1 (base case)

  • dp[0] = 0 (base case)

Build the solution back up:

  • dp[3] = 1 + 1 + 0 = 2

  • dp[4] = 2 + 1 + 1 = 4

  • dp[5] = 4 + 2 + 1 = 7

  • dp[6] = 7 + 4 + 2 = 13 (answer)

Top-Down Approach

public:
    unordered_map<int, int> dp;
    
    int tribonacci(int n) {
        // Base cases
        if (n == 0) return 0;
        if (n == 1 || n == 2) return 1;
        
        // Check if already calculated
        if (dp.find(n) != dp.end()) 
            return dp[n];
        
        // Calculate and store in memo
        dp[n] = tribonacci(n-1) + tribonacci(n-2) + tribonacci(n-3);
        return dp[n];
    }
};

Bottom-Up Approach

The only difference is we will build iteratively from the base cases to bigger problems until we have solved our main problem! So we start by solving our base cases, and up from there!

  • dp[0] = 0 (base case)

  • dp[1] = 1 (base case)

  • dp[2] = 1 (base case)

  • dp[3] = 2

  • dp[4] = dp[1]+dp[2]+dp[3] = 4

  • dp[5] = dp[2]+dp[3]+dp[4] = 7

  • dp[6] = dp[3] + dp[4]+ dp[5] = 2+4+7 = 13 (answer)

Bottom-Up Approach

class Solution {

public:
   int tribonacci(int n) {
       // Handle base cases
       if (n == 0) {
           return 0;
       }
       if (n == 1 || n == 2) {
           return 1;
       }
       
       // Initialize dp vector with size n+1
       vector<int> dp(n + 1, 0);
       
       // Set base cases
       dp[0] = 0;
       dp[1] = dp[2] = 1;
       
       // Calculate tribonacci numbers
       for (int i = 3; i <= n; i++) {
           dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
       }
       
       return dp[n];
   }
};

Recommendations

Level up your inbox by subscribing to what I am subscribed to!

Resources of the week brought to you by Julia 💗 

Self-hacks of the week brought to you by Julia 💗 

I truly believe you can gaslight yourself to success.

  1. Follow your heart - Simple, yet so powerful. Like a guide toward what truly matters.

Streamline your development process with Pinata’s easy File API

  • Easy file uploads and retrieval in minutes

  • No complex setup or infrastructure needed

  • Focus on building, not configurations

Cheers to you hacking your week!

Denisse

Reply

or to participate.