Guide to High School Computer Science
  • 💻Introduction
    • windows & Python Development
    • macOS & Python Development
    • Visual Studio Code Settings
    • Set up Github
    • Author Page
  • 🧠Prerequisite Skills
    • Keyboard Typing
    • Files & Directories
    • Use of Command Line
    • Git & GitHub
    • Markdown
    • Starting Your Python Project
  • 🐍Python Programming
    • 🍎Python Basics
      • What is Python?
      • Procedural Programming & Programming Paradigms
      • String Formatting
      • Data Types
      • Input & Output to Console
      • Working with Numbers
      • Useful Built-in Functions
      • Math & Random Module
      • Boolean Data Object
      • Comparison, Logical, and Membership Operators
      • If Statements
      • Binary Decisions
      • Multiple Decisions
      • Nested Conditions
      • [EXTRA] Bitwise Operators
      • [EXTRA] Python Style Guide
    • ⏮️Iterations
      • Introduction to While Loops
      • Infinite Loop
      • Controlling Your While Loops
      • Introduction to For Loops
      • For Loops w/ Numeric Sequences
      • For Loops w/ Strings & Lists
      • Iterable Functions w/ For Loops
    • 📦Collections
      • Strings
        • String Basics
        • String Indexing
        • String Slicing
        • String Operators & Functions
        • Basic String Methods
        • String Methods Extended
        • String Methods Document
      • Tuples & Lists
        • Tuples
        • List Basics
        • List are Mutable
        • Adding Items to a List
        • Removing Items from a List
        • Search & Reverse a List
        • List Comprehension
        • List Methods Document
      • Sets
      • Dictionary
      • How to Store Multiple Data Items
    • 💡Defining Functions
      • Functions
      • print() vs return
      • Pre-determined Arguments
      • Nested Functions
      • Map & Filter
      • [Extra] Dynamic Arguments
    • 💾File I/O
      • How to Save Text to an External File
      • Reading CSV in Python
      • Reading JSON in Python
    • 🔨Basic Python Projects
      • Basic Calculator
        • Improving the calculator
        • Exercise Set 1
        • Exercise Set 2
        • 💎Streamlit Application #1
      • Basic Password Generator
        • Exercise Set 3
        • Exercises Related to Math
        • 💎Streamlit Application #2
      • A To-Do Task List
    • ⏳Introduction to Algorithmic Thinking
      • Big-O Notation
      • Basic Algorithms
        • Linear Search
        • Binary Search
        • Basic Sorting Algorithms
      • Recursion
      • Brute Force Algorithms
      • Greedy Algorithm
        • Time on Task (CCC 2013 J4)
        • Dijkstra’s Algorithm
      • Divide and Conquer
        • Merge Sort
      • Dynamic Programming
    • 🤯Object Oriented Programming
      • Class & Objects (Definitions)
      • OOP in Python
      • Encapsulation
      • Polymorphism
      • Inheritance & Overriding
      • Override Magic Methods
      • Case Study: 2D Vectors
      • Case Study: Deck of Cards
      • Exercise
      • Abstract Data Types
      • Case Study: Static 1D Array From Java
    • Competitive Programming
      • Is This Sum Possible?
        • Is the dataset sorted?
        • Searching for a value
        • Determine if the difference between an integer from the array and the target value exists
        • Sorting Algorithms
        • Using Two Pointers
      • Two Sum - LeetCode
        • Generate all possible pairs of values
        • Subtract each value from the target, see if the difference exists in the list
      • Longest Common Prefix - LeetCode
        • Compare all possible prefixes
        • Create the longest common prefix with the direct neighbour
      • Length of Last Word - LeetCode
        • Compare all possible prefixes
      • Where can I go from one point to another?
      • Sample Outline
    • IB Recipe Book
  • 💾Python & Databases
    • Intro to Databases & Data Modeling
      • Common Data Types in SQL
      • Introduction to ERDs
      • Primary Keys and Foreign Keys
      • Database Normalization
    • What is SQL?
      • Getting Started
      • SELECT Queries
        • Selection with Conditions
        • Selection with Fuzziness
        • Selection and Sorting in Order
        • Selection without Duplicates
        • Selection with Limited Number of Outputs
      • AGGREGATE Queries
        • Counting Rows
        • Sum, Average, Min/Max Queries
        • Working with Aggregate Queries
        • Power of using Groups
        • Exercise
      • Interacting with Multiple Table
      • Inserting Data
      • External Resource
  • ☕Java Essentials
    • Basics
      • Starting Java
      • Data & Variables
      • Handling User Inputs & Type Conversion
      • Arithmetic
      • IPO Model
      • Basic Built-in Methods
      • Exercise Questions
    • Conditionals
      • Boolean Operators
      • Compare Strings
      • If Statements
      • If Else Statements
      • Making Multiple Decisions
      • Using Switch
      • Flowchart Symbols
      • Exercise Questions
    • Iterations
      • While Loops
      • For Loop
      • Exercises
    • Java Type Casting
    • Strings
      • Common String Practices
      • String Formatting
      • Java Special Characters
    • Collection
      • Arrays
      • For Each Loop
      • ArrayList
      • Exercise Questions
    • Static Methods
      • (Aside) Clearing your Console
    • Randomness in Java
    • Delayed Output in Java
    • Java Output Formatting
    • Java Style Guide
  • 🛠️JavaScript Programming
    • Our Programming Editor & Workflow
      • Hello, world!
      • Commenting & Variables
      • Data in JavaScript
      • Operators
      • String Formatting
      • Getting User Input
    • JavaScript Exercise Set 1
    • Making Decisions
      • Comparing Values
      • Combining Boolean Comparisons
      • Creating Branches
    • JavaScript Exercise Set 2
    • While Loops
      • Infinite While Loop
      • While Loops and Numbers
      • While Loops and Flags
      • While loops w/ Strings
    • JavaScript Exercise Set 3
    • Subprograms & Functions
      • Creating a Function in JavaScript
      • Function with Input and Assignable Output
    • JavaScript Exercise Set 4
  • 💾Topics in CS
    • Computer Environments & Systems
      • Computer Components
        • In-depth Explanations
      • File Maintenance
      • Computer & Safety
      • Software Development
      • Bits & Binary
    • Careers related to Computer Science
    • Postsecondary Opportunities
Powered by GitBook
On this page
  • Linear Search Solution
  • Binary Search Solution
  • Code Explanation
  • Function: possibleSum2
  1. Python Programming
  2. Competitive Programming
  3. Is This Sum Possible?

Determine if the difference between an integer from the array and the target value exists

PreviousSearching for a valueNextSorting Algorithms

Last updated 9 months ago

Linear Search Solution

def possibleSum1(array: list[int], target: int) -> bool:
    # Linear Search Method
    for i in range(len(array)):
        current = array[i]
        diff = target - current
        
        # search diff from i+1 onwards
        for j in range(i+1, len(array)):
            if array[j] == diff:
                return True
    return False

Outer Loop:

for i in range(len(array)):
    current = array[i]
    diff = target - current
  • The outer loop iterates over each element in array with the index i.

  • current = array[i]: Assigns the value at the current index i to the variable current.

  • diff = target - current: Calculates the difference diff between the target and the current element. This difference is the value we need to find in the rest of the array to sum with current to reach the target.

Inner Loop:

for j in range(i+1, len(array)):
    if array[j] == diff:
        return True
  • The inner loop starts from the index i + 1 and iterates to the end of the array. This ensures that we are not using the same element twice and that we find distinct pairs.

  • Comparison:

    • For each j, it checks if array[j] equals diff.

    • If array[j] == diff, it means the current element array[i] and array[j] together sum up to the target. The function immediately returns True.

Return False:

return False
  • If the function completes the outer loop without finding any pair of elements that sum up to the target, it returns False. This indicates that no such pair exists in the array.

Binary Search Solution

def binarySearch(array: list[int], target: int, start:int = 0) -> int:
    left = start
    right = len(array)-1

    while left <= right:
        middle = (left + right) // 2
        if array[middle] == target:
            return middle
        elif array[middle] > target:
            right = middle - 1
        else:
            left = middle + 1
    # end of while
    
    return -1 #  If the target is not found in the array, return -1 as an error code.
# end of binSearch()

def possibleSum2(array: list[int], target: int) -> bool:
    # Binary Search Method
    for i in range(len(array)):
        current = array[i]
        diff = target - current
    
        if binarySearch(array, diff, i+1) != -1:
            return True
    # end of for
    return False # If the loop completes without finding any such pair, return False
# end of possibleSum2

Code Explanation

def binarySearch(array: list[int], target: int, start: int = 0) -> int:
  • array: list[int]: A sorted list of integers.

  • target: int: The integer value to search for in the list.

  • start: int = 0: The starting index for the search. Defaults to 0.

  • -> int: The function returns the index of the target if found; otherwise, it returns -1.

Function Logic

Initialize left and right Pointers:

left = start
right = len(array) - 1
  • left starts at the start index (default is 0).

  • right starts at the last index of the array (len(array) - 1).

Binary Search Loop:

while left <= right:
    middle = (left + right) // 2
  • The loop continues as long as left is less than or equal to right.

  • middle is the index of the middle element in the current search range.

Check Middle Element:

if array[middle] == target:
    return middle
  • If the middle element equals the target, the function returns the middle index.

Adjust Search Range:

if array[middle] > target:
    right = middle - 1
else:
    left = middle + 1
  • If the middle element is greater than the target, search in the left half by updating right to middle - 1.

  • If the middle element is less than the target, search in the right half by updating left to middle + 1.

Function: possibleSum2

def possibleSum2(array: list[int], target: int) -> bool:
  • array: list[int]: A sorted list of integers.

  • target: int: The target sum to find.

  • -> bool: The function returns True if there are two distinct numbers in the array that sum to target; otherwise, False.

Function Logic

Iterate Over the Array:

for i in range(len(array)):
    current = array[i]
    diff = target - current
  • Loop over each element in the array with index i.

  • current is the current element.

  • diff is the difference between the target and the current element, representing the value needed to reach the target.

Use binarySearch to Find diff:

if binarySearch(array, diff, i + 1) != -1:
    return True
  • Call binarySearch to search for diff in the subarray starting from index i + 1 to the end of the array.

  • If binarySearch returns a valid index (not -1), it means there exists an element diff in the array such that current + diff = target. The function returns True.

🐍
Example Coding Interview Question from Google