Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Interview-Science/code-template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

3 Commits

Repository files navigation

code-template

Code template for coding interview

Table of contents

  • Binary search
    • lower_bound
      • pseudocode
      • Python3
      • Java
      • C++
    • upper_bound
      • pseudocode
      • Python3
      • Java
      • C++
  • Sliding window
  • Monotonic stack
  • Prefix tree
  • BFS
  • DFS
  • Rolling hash
  • Topological sort
  • Union Find

Binary Search

Template

Return the index of first valid element in nums

BINARY_SEARCH(nums, target)
 // loop invariant: first valid element ∈ [left, right)
 left, right = 0, nums.length
 while left < right
 mid = left + (right - left) // 2
 if VALID(nums[mid], target)
 right = mid
 else
 left = mid + 1
 return left

API: Lower Bound

Return the index of first element greater or equal to target

pseudocode

// nums = [0, 2, 2, 2, 3, 4, 5], target = 2 return 1
LOWER_BOUND(nums, target)
 left, right = 0, nums.length
 while left < right
 mid = left + (right - left) // 2
 if VALID(nums[mid], target)
 right = mid
 else
 left = mid + 1
 return left
VALID(num, target)
 if num >= target
 return True
 return False

Python3

class Solution:
 def lower_bound(self, nums: List[int], target: int) -> int:
 def valid(num, target):
 if num >= target:
 return True
 return False
 left, right = 0, len(nums)
 while left < right:
 mid = left + (right - left) // 2
 if valid(nums[mid], target):
 right = mid
 else:
 left = mid + 1
 return left

Java

class Solution {
 private boolean valid(int num, int target) {
 if (num >= target) {
 return true;
 }
 return false;
 }
 public int lowerBound(int[] nums, int target) {
 int left = 0, right = nums.length;
 while (left < right) {
 int mid = ((right - left) >> 1) + left;
 if (valid(nums[mid], target)) {
 right = mid;
 } else {
 left = mid + 1;
 }
 }
 return left;
 }
}

C++

class Solution {
private:
 bool valid(int num, int target) {
 if (num >= target) {
 return true;
 }
 return false;
 }
public:
 int lowerBound(vector<int>& nums, int target) {
 int left = 0, right = nums.size();
 while (left < right) {
 int mid = ((right - left) >> 1) + left;
 if (valid(nums[mid], target)) {
 right = mid;
 } else {
 left = mid + 1;
 }
 }
 return left;
 }
};

API: Upper Bound

Return the index of first element greater to target

pseudocode

// nums = [0, 2, 2, 2, 3, 4, 5], target = 2 return 4
UPPER_BOUND(nums, target)
 // loop invariant: first valid element ∈ [left, right)
 left, right = 0, nums.length
 while left < right
 mid = left + (right - left) // 2
 if VALID(nums[mid], target)
 right = mid
 else
 left = mid + 1
 return left
VALID(num, target)
	// the only different between LOWER_BOUND and UPPER_BOUND
	if num > target
		return True
	return False

Python3

class Solution:
 def upper_bound(self, nums: List[int], target: int) -> int:
 def valid(num, target):
 if num > target:
 return True
 return False
 left, right = 0, len(nums)
 while left < right:
 mid = left + (right - left) // 2
 if valid(nums[mid], target):
 right = mid
 else:
 left = mid + 1
 return left

Java

class Solution {
 private boolean valid(int num, int target) {
 if (num > target) {
 return true;
 }
 return false;
 }
 public int upperBound(int[] nums, int target) {
 int left = 0, right = nums.length;
 while (left < right) {
 int mid = ((right - left) >> 1) + left;
 if (valid(nums[mid], target)) {
 right = mid;
 } else {
 left = mid + 1;
 }
 }
 return left;
 }
}

C++

class Solution {
private:
 bool valid(int num, int target) {
 if (num > target) {
 return true;
 }
 return false;
 }
public:
 int upperBound(vector<int>& nums, int target) {
 int left = 0, right = nums.size();
 while (left < right) {
 int mid = ((right - left) >> 1) + left;
 if (valid(nums[mid], target)) {
 right = mid;
 } else {
 left = mid + 1;
 }
 }
 return left;
 }
};

About

Code template for coding interview

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /