# Software Engineer I Interview Questions

Software engineer i interview questions shared by candidates

## Top Interview Questions

Given a string of format '2+3*2-1', calculate and return the result. No parenthesis in the input, just integers and + - * / operators. Operator precedence has to be considered. Linear time complexity and minimal data structure use is preferred. I did 2 pass on input string. I also did two passes on the input string. I created the following helper classes: Calculate, which takes in the input string, the location of the operation and the operation itself, and returns the result of the calculation. It's not too hard to figure out how to extract the operands from the string (just iterate backwards/forwards until you bump into the end, beginning or another operator). InsertResultInStr, which takes in the input string, the location of insertion and places a given integer into the input string. I couldn't prove this, but I think its true that the result of a multiplication between m and n digit numbers can always fit in the concatenation of those numbers with '*' in the middle. Sorry if the explanation is a little confusing, but InsertResultInStr(input, 3, 6) for input string = "2 + 3*2* - 1" should result in string = "2 + 6 - 1". Now, in the main fn, iterate through the string until we find a '*' or a '/', and when we do, calculate the answer via Calculate(), then InsertResultInStr(). Then iterate through the string again looking for '+' and '-', and finally convert the final string to an int and return it. One thing that is not clear in the description is what we should do to handle if a/b is not an int. My guess is that a/b will always return an integer. I guess you can handle this in any way you want: ignore the stuff after the decimal point, or maybe keep the maximum amount of precision that your string-space can handle. I used a different approach by making use of a queue: - parse the string, and push in the operands and operators onto a queue - evaluate the queue My general approach was this: - read in lhs, operator and rhs - if operator is "+" or "-", enqueue lhs and operator > if string is empty, we are done parsing --> enqueue rhs > else, prepend rhs to the string (e.g. str = rhs + str), to be parsed further - else, the operator is "*" or "/" --> perform the operation on lhs and rhs, and prepend the result to the string Final step is evaluating the queue -- simply dequeue lhs, operator and rhs and evaluate. (*note: this was tricky to get right on paper, and I've made a few mistakes which I had to debug) // Given: a well-formatted string e.g. "2 + 2*3 - 1". Evaluate the expression. string getCurr(string& str); int eval(string str) { if (str.empty()) return -1; // operand / operator queue std::queue q; // construct it char buf[5]; while (!str.empty()) { string lhs = getCurr(str), oper = getCurr(str), rhs = getCurr(str); // evaluate directly if (oper == "*") { int res = atoi(lhs.c_str()) * atoi(rhs.c_str()); // restore the string str = itoa(res, buf, 10) + str; } // evaluate directly else if (oper == "/") { int res = atoi(lhs.c_str()) / atoi(rhs.c_str()); // restore the string str = itoa(res, buf, 10) + str; } else // "+" or "-" { q.push(lhs); q.push(oper); // finished parsing the expression if (str.empty()) q.push(rhs); else // restore the string str = rhs + str; } } // evaluate the queue int res, rhs; string oper; res = atoi(q.front().c_str()); q.pop(); while (!q.empty()) { oper = q.front(); q.pop(); rhs = atoi(q.front().c_str()); q.pop(); if (oper == "+") res += rhs; else // "-" res -= rhs; } return res; } string getCurr(string& str) { if (str.empty()) return ""; string curr(""); // operator if (str[0] == '-' || str[0] == '+' || str[0] == '*' || str[0] == '/') { curr += str[0]; str = str.substr(1); } else // a number { do { curr += str[0]; str = str.substr(1); } while (!str.empty() && str[0] >= '0' && str[0] <= '9'); } return curr; } Show More Responses |

there is an array with 99 length long, each spot will have number from 1-100, number will never repeat on the array. Give as many way as possible to find the missing number. |

What is systems engineering? |

Write a function that takes an integer and counts the number of bits. |

Complexity of this algorithm. How to improve the complexity? |

Remove the nth from last element in a singularly linked list in linear time. |

Find the average value of a binary tree both recursively and iteratively. Explain why iteratively may be preferred over recursively. |

Given some array such as {4, 2, 5, 3}, write a function that would take in the array and a number that would return how many pairs add up to the number. |

Take an input string and output the reverse of that string. May use any programming language. |

You are the leader of a gang of n pirates who has just returned from a successful treasure hunt. You will make a suggestion about how to divide up the treasure and then a vote will be held. If you get a majority vote, your suggestion is accepted, the treasure is divided that way, and you all move on. If your suggestion is turned down, the other pirates kill you and the next one down the chain of command makes a suggestion and the cycle continues in that fashion until a method is decided upon. Your fellow pirates are reasonable and will know the best deal they can get if you suggest it. Your vote does count for your own offer but, in the event of a tie, you lose. Finally, assume that the gold supply to divide is infinite. What discrete offers are available at which ranges of values for n which get you the greatest amount of gold and allow you to keep your life? |

**1**–

**10**of

**759**Interview Questions

## See Interview Questions for Similar Jobs

- Software Engineer
- Software Development Engineer
- Software Development Engineer II
- Software Developer
- Senior Software Engineer
- Software Development Engineer III
- Intern
- Software Development Engineer In Test
- Senior Software Development Engineer
- Software Engineer Intern
- Product Manager
- Software Engineering
- Software Engineer III
- Analyst
- Data Scientist
- Software Engineer I
- Senior Software Developer
- Software Development Manager