Microsoft software engineer interviews cover algorithms, data structures, system design, and coding problems drawn from real interview rounds.
Design Rate Limiter Design a rate limiter system that controls the number of requests allowed within a specified time window. The rate limiter is...
Input: StringProblem Statement Design a notification service that supports sending notifications through multiple channels (SMS, Email) and is architected to...
Input: Number(s)Shortest Substring with N Unique Characters *This is a variation of the leetcode problem* Given a string s and an integer n, find the length of...
Question You are given n people labeled from 0 to n - 1. Some pairs of people know each other directly. These relationships are given as a...
OA [CodeSignal] Prime Jumps A game is played with the following rules: - A player starts at cell 0 with a score of 0. - There is a row of n cells...
k substitution operations on a number string s. In each operation, choose any digit in s that is...Input: Stringnums. Rearrange nums so that all even numbers appear before all odd numbers. The relative order of even or odd...Input: ArrayTop 5 Recently Asked System Design Questions - Microsoft These are the commonly asked system design questions from Microsoft interviews and some...
Input: Listdef reverse_linked_list(head: Optional[ListNode]) -> Optional[ListNode]:head = [1, 2, 3, 4, 5] [5, 4, 3, 2, 1] head = [1] [1] [0, 5000]. -5000 <= Node.val <= 5000. head. Your task is to reverse the linked list and return the new head node. Ensure that the function can handle edge cases such as an empty list or a single node list.def reverse_linked_list(head: Optional[Node]) -> Optional[Node]: head = 1 -> 2 -> 3 -> None 3 -> 2 -> 1 -> None 1 -> 2 -> 3 to 3 -> 2 -> 1.head = None None None.[0, 5000]. -1000 and 1000. def reverse_linked_list(head: Optional[ListNode]) -> Optional[ListNode]:1 -> 2 -> 3 -> 4 -> 5 -> None5 -> 4 -> 3 -> 2 -> 1 -> None1 -> None1 -> Nonedef reverse_linked_list(head: ListNode) -> ListNode: get(key) and put(key, value). The get method retrieves the value of the key if it exists in the cache. Otherwise, it returns -1. The put method will insert or update the value for a key. If the cache exceeds its capacity, it should invalidate the least recently used item before inserting a new item into the cache.def __init__(self, capacity: int): # Initializes the LRU cache with positive size capacity.def get(self, key: int) -> int: # Returns the value of the key if it exists in the cache, otherwise returns -1.def put(self, key: int, value: int) -> None: # Updates or inserts the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item.cache = LRUCache(2); cache.put(1, 1); cache.put(2, 2); cache.get(1)1 1 was accessed and is now the most recently used.cache.put(3, 3)-1 cache exceeds capacity. 2 is evicted.get(key) and put(key, value). The get method retrieves the value of the key if it exists in the cache, otherwise returns -1. The put method updates or adds the value of the key in the cache. When the cache reaches its capacity, it should invalidate the least recently used entry before inserting a new item. def __init__(self, capacity: int): # initialize LRUCache with positive size capacitydef get(self, key: int) -> int: # return the value of the key, or -1 if the key does not existdef put(self, key: int, value: int) -> None: # update the value of the key or insert the key if it is not already presentlru_cache = LRUCache(2)lru_cache.put(1, 1)lru_cache.put(2, 2)print(lru_cache.get(1)) 1 lru_cache.put(3, 3) 1 <= capacity <= 30000 <= key <= 10^40 <= value <= 10^8s, you need to return the number of palindromic substrings in s. A palindrome is a string that reads the same backward as forward. def count_palindromic_substrings(s: str) -> int:"aaa", Output: 6, Explanation: Substrings are "a", "a", "a", "aa", "aa", "aaa"."abc", Output: 3, Explanation: Substrings are "a", "b", "c".1 <= len(s) <= 1000s consists of lowercase English letters.nums, implement a function maxSubArray(nums: List[int]) -> int that returns the largest sum of contiguous elements in the array.def maxSubArray(nums: List[int]) -> int: Returns the maximum sum of a contiguous subarray.nums = [-2,1,-3,4,-1,2,1,-5,4]6[4,-1,2,1] has the largest sum 6.Example 2:nums = [1]1Constraints:1 <= nums.length <= 10^5-10^4 <= nums[i] <= 10^4dijkstra(graph: Dict[int, List[Tuple[int, int]]], start: int) -> Dict[int, int] that calculates the shortest path from a starting node to all other nodes.def dijkstra(graph: Dict[int, List[Tuple[int, int]]], start: int) -> Dict[int, int]: Returns a dictionary where keys are node indices and values are the shortest distances from the start.graph = {0: [(1, 4), (2, 1)], 1: [(3, 1)], 2: [(1, 2), (3, 5)], 3: []}, start = 0{0: 0, 1: 3, 2: 1, 3: 4}0 to node 3 is through 2 and then to 1.Example 2:graph = {0: [(1, 2)], 1: [(2, 3)], 2: [(3, 1)], 3: []}, start = 0{0: 0, 1: 2, 2: 5, 3: 6}Constraints:1 <= len(graph) <= 10^40 <= graph[i][j][0] < len(graph)0 < graph[i][j][1] <= 10^3Twitter class that supports the following methods:postTweet(userId: int, tweetId: int) -> None: Record a new tweet.getNewsFeed(userId: int) -> List[int]: Retrieve the 10 most recent tweet IDs in the user's news feed.follow(followerId: int, followeeId: int) -> None: Allow a follower to follow a followee.unfollow(followerId: int, followeeId: int) -> None: Allow a follower to unfollow a followee.def postTweet(self, userId: int, tweetId: int) -> Nonedef getNewsFeed(self, userId: int) -> List[int]def follow(self, followerId: int, followeeId: int) -> Nonedef unfollow(self, followerId: int, followeeId: int) -> NoneExample 1:twitter = Twitter()twitter.postTweet(1, 5)twitter.getNewsFeed(1)[5]Example 2:twitter.follow(1, 2)twitter.postTweet(2, 6)twitter.getNewsFeed(1)[6, 5]Constraints:0 <= userId, followerId, followeeId, tweetId <= 10^410^4. At most 3 * 10^4 follow operations will occur.LRUCache class that supports get(key: int) -> int and put(key: int, value: int) -> None methods. The cache will have a limited capacity.def get(self, key: int) -> int: Returns the value of the key if present, otherwise -1.def put(self, key: int, value: int) -> None: Updates the value of the key or adds it if it's not already present. When the cache reaches its capacity, it invalidates the least recently used item before inserting a new item.Example 1:cache = LRUCache(2)cache.put(1, 1)cache.put(2, 2)cache.get(1)1Example 2:cache.put(2, 1)cache.put(2, 2)cache.get(2)2Constraints:capacity will be between 1 and 3000.key and value are integers within the range of a 32-bit signed integer.Sign up for free to access walkthroughs, AI-generated questions, and more.
Get Started Free