Previous
0 / 4
Module DS-10DSJAVA

Rotated Array Search

DSJAVA β€’ Data Structures and Algorithms in Java

Browser-only practice

Problem Statement

Challenge lab in Searching Ordered and Unordered Data

Mission

Find a target in a rotated sorted array using logarithmic search.

Learning outcome: Search a rotated sorted array

Correctness contract

Invariant: The active interval contains every remaining position where the target could occur.

Required technique: Identify the normally sorted half at each midpoint, then retain only the half whose value range can contain the target.

Complexity target: time O(log n); space O(n) input.

Input and output

Input: n, then n integers, then one target integer. Whitespace may be spaces or line breaks.

Output: Print the required zero-based index as one integer. Return it as a String; Main.java prints it without adding other text.

Assumptions:

  • The array contains distinct values and is a rotation of a strictly increasing array.

Before you code

  1. Restate the input and output contract, then predict the visible example without running code.
  2. Implement the core state transition: Identify the normally sorted half at each midpoint, then retain only the half whose value range can contain the target.
  3. Trace the smallest boundary case, verify exact formatting, and justify the authored time and auxiliary-space bounds.

Implement Practice.solve(Scanner sc). Keep every provided filename and public class name unchanged.

Sample input

7 4 5 6 7 0 1 2 0

Sample output

4

Why the sample works: Visible walkthrough for the ordinary non-trivial path. At every midpoint, one sorted half is identified and kept only when its value range contains the target. Input `7 4 5 6 7 0 1 2 0` therefore produces `4`.

Progressive hints

Try the trace and first milestone before opening a hint. Open them in order.

Open hint 1

Hint 1 β€” Contract: identify what each parsed variable represents and write the invariant beside the loop or recursive method.

Open hint 2

Hint 2 β€” Next step: Write the meaning of lo and hi above the loop and verify that every update shrinks the interval.

Open hint 3

Hint 3 β€” Verification: compare the structure state before and after one operation, then test the smallest valid input and a duplicate or unreachable case when allowed.

Constraints

Input contract: n, then n integers, then one target integer.

  • The array contains distinct values and is a rotation of a strictly increasing array.

Required technique: Identify the normally sorted half at each midpoint, then retain only the half whose value range can contain the target.

Output contract: Print the required zero-based index as one integer.

Use Java 8-compatible code only. Keep the public class names and Practice.solve(Scanner sc) signature from the starter files.

Input Format

n, then n integers, then one target integer.

Output Format

Print the required zero-based index as one integer.

Sample Testcases

Submit runs every public testcase in this browser. Results and code never leave this device.

Sample #1
Public sample
7 4 5 6 7 0 1 2 0
4
Visible walkthrough for the ordinary non-trivial path. At every midpoint, one sorted half is identified and kept only when its value range contains the target. Input `7 4 5 6 7 0 1 2 0` therefore produces `4`.

Web terminal

C, C++, Java, and Python run locally in a browser VM. No worker or visualizer is used.

Saved in this browser
Editor settings