在 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