# House Robber Problem C easy to understand Sol

My first basic sol where no confusion needed and just easy to understand :)
condition is: adjacent houses cannot be robbed
Solution: So s0 can be first house, s1 can be second house,

• s2 to (first+3rd) houses
• In a loop starting from 4th house, (where this 4th house can be added to s0 and s1 as not adjacent)
• Keep adding the current element to s0 and current element to s1
compare the sums and assign to s,
• Keep assigning the max value from s
• Keep moving s0 to s1, s1 to s2, s2 to s..
`/* adjacent houses cannot be robbed    so s0 can be first house, s1 can be second house,   s2 to (first+3rd) houses      in a loop starting from 4th house,   keep adding the current element to s0 and current element to s1   compare the sums and assign to s,      Keep assigning the max value from s      Keep moving s0 to s1, s1 to s2, s2 to s..*/int rob(int* nums, int ns){    int ii, mx=0, s0, s1, s2,s;        if (!ns) return 0;    if (ns == 1) return nums;    s0 = nums;    s1 = nums;    if (ns == 2) return (s0 > s1 ? s0 : s1);    s2 = nums + nums;    mx = (s2 > s1) ? s2 : s1;    for (ii=3; ii<ns; ii++){        if ((s1 +nums[ii]) > (s0 + nums[ii]))            s = s1 + nums[ii];        else             s = s0 + nums[ii];        if (mx < s) mx = s;        s0=s1; s1=s2; s2 =s;    }    return mx;}`

Next optimized solution, where tried to some temp variables, additions.. :

`/* this solution is to reduce the temp. variables   , one extra addition and one extra assignment   s2 can be reduced,   s1 + nums[ii] and s0 + nums[ii] this comparison will take place    when s0 is moved to s1 in next step.   So we can directly initialize s0 to 0, s1 to first house   in loop compare s0+current house with s1 and keep assigning max to s      Keep updating max with max value of s      Keep moving s1 to s0, s to s1 */int rob(int* nums, int ns){    int ii, mx=0, s0, s1, s;        if (!ns) return 0;    if (ns == 1) return nums;    s0 = 0;    s1 = nums;    for (ii=1; ii<ns; ii++){        if (s1 > (s0 + nums[ii]))            s = s1;        else             s = s0 + nums[ii];        if (mx < s) mx = s;        s0=s1; s1=s;    }    return mx;}`

--

--