📌  相关文章
📜  在 0 和 1 的排序数组中查找第一个 1 的索引

📅  最后修改于: 2022-05-13 01:57:47.167000             🧑  作者: Mango

在 0 和 1 的排序数组中查找第一个 1 的索引

给定一个由 0 和 1 组成的排序数组。问题是在排序数组中找到第一个“1”的索引。数组可能仅包含 0 或仅包含 1。如果数组中不存在 1,则打印“-1”。
例子 :

Input : arr[] = {0, 0, 0, 0, 0, 0, 1, 1, 1, 1}
Output : 6
The index of first 1 in the array is 6.

Input : arr[] = {0, 0, 0, 0}
Output : -1
1's are not present in the array.

资料来源:在亚马逊采访中提问

朴素的方法:从左到右遍历数组并返回第一个'1'的索引。如果数组中不存在 1,则打印“-1”。

C++
// C++ implementation to find the index of
// first '1' in a sorted array of 0's and 1's
#include 
using namespace std;
 
// function to find the index of first '1'
int indexOfFirstOne(int arr[], int n)
{
    // traverse the array from left to right
    for (int i = 0; i < n; i++)
 
        // if true, then return i
        if (arr[i] == 1)
            return i;
 
    // 1's are not present in the array
    return -1;
}
 
// Driver program to test above
int main()
{
    int arr[] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << indexOfFirstOne(arr, n);
    return 0;
}


Java
// Java program to find the index of
// first '1' in a sorted array of 0's and 1's
class GFG {
     
 
    // function to find the index of first '1'
    public static int indexOfFirstOne(int arr[], int n)
    {
        // traverse the array from left to right
        for (int i = 0; i < n; i++)
      
            // if true, then return i
            if (arr[i] == 1)
                return i;
      
        // 1's are not present in the array
        return -1;
    }
     
    /* Driver program to test above function */
    public static void main(String[] args)
    {
        int arr[] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 };
        int n = arr.length;
        System.out.println(indexOfFirstOne(arr, n));
         
    }
  }
// This code is contributed by Arnav Kr. Mandal.


Python3
# Python3 implementation to find
# the index of first '1' in a
# sorted array of 0's and 1's
 
# function to find the index of first '1'
def indexOfFirstOne(arr, n):
 
    # traverse the array from left to right
    for i in range(0, n):
         
        # if true, then return i
        if (arr[i] == 1):
            return i
 
    # 1's are not present in the array
    return -1
 
# Driver program to test above
arr = [ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 ]
n = len(arr)
ans = indexOfFirstOne(arr, n)
print(ans)
 
# This code is contributed by saloni1297


C#
// C# program to find the index of
// first '1' in a sorted array
// of 0's and 1's
using System;
 
class GFG
{
    // function to find the index of first '1'
    public static int indexOfFirstOne(int []arr, int n)
    {
        // traverse the array from left to right
        for (int i = 0; i < n; i++)
     
            // if true, then return i
            if (arr[i] == 1)
                return i;
     
        // 1's are not present in the array
        return -1;
    }
     
    // Driver program
    public static void Main()
    {
        int []arr = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 };
        int n = arr.Length;
        Console.Write(indexOfFirstOne(arr, n));
         
    }
}
 
// This code is contributed by Sam007


PHP


Javascript











C++
// C++ implementation to find the index of first
// '1' in a sorted array of 0's and 1's
#include 
using namespace std;
 
// function to find the index of first '1'
// binary search technique is applied
int indexOfFirstOne(int arr[], int low, int high)
{
    while (low <= high) {
        int mid = (low + high) / 2;
 
        // if true, then 'mid' is the index of first '1'
        if (arr[mid] == 1 && (mid == 0 || arr[mid - 1] == 0))
            return mid;
 
        // first '1' lies to the left of 'mid'
        else if (arr[mid] == 1)
            high = mid - 1;
 
        // first '1' lies to the right of 'mid'
        else
            low = mid + 1;
    }
 
    // 1's are not present in the array
    return -1;
}
 
// Driver program to test above
int main()
{
    int arr[] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << indexOfFirstOne(arr, 0, n - 1);
    return 0;
}


Java
// Java program to find the index of
// first '1' in a sorted array of 0's and 1's
class GFG {
     
    // function to find the index of first '1'
    // binary search technique is applied
    public static int indexOfFirstOne(int arr[], int low,
                                                int high)
    {
        while (low <= high) {
            int mid = (low + high) / 2;
      
            // if true, then 'mid' is the index of first '1'
            if (arr[mid] == 1 && (mid == 0 || arr[mid - 1]
                                                    == 0))
                return mid;
      
            // first '1' lies to the left of 'mid'
            else if (arr[mid] == 1)
                high = mid - 1;
      
            // first '1' lies to the right of 'mid'
            else
                low = mid + 1;
        }
      
        // 1's are not present in the array
        return -1;
    }
     
    /* Driver program to test above function */
    public static void main(String[] args)
    {
        int arr[] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 };
        int n = arr.length;
        System.out.println(indexOfFirstOne(arr, 0,
                                              n - 1));
         
    }
  }
// This code is contributed by Arnav Kr. Mandal.


Python3
# Python3 implementation to find
# the index of first '1' in a
# sorted array of 0's and 1's
 
# function to find the index of first '1'
# binary search technique is applied
def indexOfFirstOne( arr, low, high):
 
    while (low <= high):
         
        mid = int((low + high) / 2)
 
        # if true, then 'mid' is the index of first '1'
        if (arr[mid] == 1 and (mid == 0 or arr[mid - 1] == 0)):
            return mid
 
        # first '1' lies to the left of 'mid'
        elif (arr[mid] == 1):
            high = mid - 1
 
        # first '1' lies to the right of 'mid'
        else:
            low = mid + 1
     
 
    # 1's are not present in the array
    return -1;
 
# Driver program to test above
arr = [0, 0, 0, 0, 0, 0, 1, 1, 1, 1 ]
n = len(arr)
ans = indexOfFirstOne(arr, 0, n - 1)
print (ans)
 
# This code is contributed by saloni1297


C#
// C# program to find the index of
// first '1' in a sorted array of 0's and 1's
using System;
 
class GFG
{
    // function to find the index of first '1'
    // binary search technique is applied
    public static int indexOfFirstOne(int []arr, int low,
                                                int high)
    {
        while (low <= high) {
            int mid = (low + high) / 2;
     
            // if true, then 'mid' is the index of first '1'
            if (arr[mid] == 1 && (mid == 0 || arr[mid - 1]
                                                    == 0))
                return mid;
     
            // first '1' lies to the left of 'mid'
            else if (arr[mid] == 1)
                high = mid - 1;
     
            // first '1' lies to the right of 'mid'
            else
                low = mid + 1;
        }
     
        // 1's are not present in the array
        return -1;
    }
     
    // Driver program
    public static void Main()
    {
        int []arr = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 };
        int n = arr.Length;
        Console.Write(indexOfFirstOne(arr, 0, n - 1));
         
    }
}
 
// This code is contributed by Sam007


PHP


Javascript


输出 :

6

时间复杂度:O(n)
Efficient Approach(Binary Search):对排序后的数组使用二分查找技术,从而找到第一个'1'的索引。

C++

// C++ implementation to find the index of first
// '1' in a sorted array of 0's and 1's
#include 
using namespace std;
 
// function to find the index of first '1'
// binary search technique is applied
int indexOfFirstOne(int arr[], int low, int high)
{
    while (low <= high) {
        int mid = (low + high) / 2;
 
        // if true, then 'mid' is the index of first '1'
        if (arr[mid] == 1 && (mid == 0 || arr[mid - 1] == 0))
            return mid;
 
        // first '1' lies to the left of 'mid'
        else if (arr[mid] == 1)
            high = mid - 1;
 
        // first '1' lies to the right of 'mid'
        else
            low = mid + 1;
    }
 
    // 1's are not present in the array
    return -1;
}
 
// Driver program to test above
int main()
{
    int arr[] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << indexOfFirstOne(arr, 0, n - 1);
    return 0;
}

Java

// Java program to find the index of
// first '1' in a sorted array of 0's and 1's
class GFG {
     
    // function to find the index of first '1'
    // binary search technique is applied
    public static int indexOfFirstOne(int arr[], int low,
                                                int high)
    {
        while (low <= high) {
            int mid = (low + high) / 2;
      
            // if true, then 'mid' is the index of first '1'
            if (arr[mid] == 1 && (mid == 0 || arr[mid - 1]
                                                    == 0))
                return mid;
      
            // first '1' lies to the left of 'mid'
            else if (arr[mid] == 1)
                high = mid - 1;
      
            // first '1' lies to the right of 'mid'
            else
                low = mid + 1;
        }
      
        // 1's are not present in the array
        return -1;
    }
     
    /* Driver program to test above function */
    public static void main(String[] args)
    {
        int arr[] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 };
        int n = arr.length;
        System.out.println(indexOfFirstOne(arr, 0,
                                              n - 1));
         
    }
  }
// This code is contributed by Arnav Kr. Mandal.

Python3

# Python3 implementation to find
# the index of first '1' in a
# sorted array of 0's and 1's
 
# function to find the index of first '1'
# binary search technique is applied
def indexOfFirstOne( arr, low, high):
 
    while (low <= high):
         
        mid = int((low + high) / 2)
 
        # if true, then 'mid' is the index of first '1'
        if (arr[mid] == 1 and (mid == 0 or arr[mid - 1] == 0)):
            return mid
 
        # first '1' lies to the left of 'mid'
        elif (arr[mid] == 1):
            high = mid - 1
 
        # first '1' lies to the right of 'mid'
        else:
            low = mid + 1
     
 
    # 1's are not present in the array
    return -1;
 
# Driver program to test above
arr = [0, 0, 0, 0, 0, 0, 1, 1, 1, 1 ]
n = len(arr)
ans = indexOfFirstOne(arr, 0, n - 1)
print (ans)
 
# This code is contributed by saloni1297

C#

// C# program to find the index of
// first '1' in a sorted array of 0's and 1's
using System;
 
class GFG
{
    // function to find the index of first '1'
    // binary search technique is applied
    public static int indexOfFirstOne(int []arr, int low,
                                                int high)
    {
        while (low <= high) {
            int mid = (low + high) / 2;
     
            // if true, then 'mid' is the index of first '1'
            if (arr[mid] == 1 && (mid == 0 || arr[mid - 1]
                                                    == 0))
                return mid;
     
            // first '1' lies to the left of 'mid'
            else if (arr[mid] == 1)
                high = mid - 1;
     
            // first '1' lies to the right of 'mid'
            else
                low = mid + 1;
        }
     
        // 1's are not present in the array
        return -1;
    }
     
    // Driver program
    public static void Main()
    {
        int []arr = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 };
        int n = arr.Length;
        Console.Write(indexOfFirstOne(arr, 0, n - 1));
         
    }
}
 
// This code is contributed by Sam007

PHP


Javascript


输出 :

6