给定一个数组和一个数字“x”,编写一个函数从给定的数组中删除“x”。我们假设数组用它维护两件事,容量和大小。所以当我们删除一个项目时,容量不会改变,只有大小会改变。
例子:
Input: arr[] = {3, 1, 2, 5, 90}, x = 2, size = 5, capacity = 5
Output: arr[] = {3, 1, 5, 90, _}, size = 4, capacity = 5
Input: arr[] = {3, 1, 2, _, _}, x = 2, size = 3, capacity = 5
Output: arr[] = {3, 1, _, _, _}, size = 4, capacity = 5
方法一(先搜索,后删除)
我们首先在数组中搜索 ‘x’,然后将 x 右侧的元素向后搜索一个位置。下面是这个简单方法的实现。
C++
// C++ program to remove a given element from an array
#include
using namespace std;
// This function removes an element x from arr[] and
// returns new size after removal (size is reduced only
// when x is present in arr[]
int deleteElement(int arr[], int n, int x)
{
// Search x in array
int i;
for (i=0; i
Java
// Java program to remove a given element from an array
import java.io.*;
class Deletion {
// This function removes an element x from arr[] and
// returns new size after removal (size is reduced only
// when x is present in arr[]
static int deleteElement(int arr[], int n, int x)
{
// Search x in array
int i;
for (i=0; i
Python3
# Python 3 program to remove a given
# element from an array
# This function removes an element x
# from arr[] and returns new size after
# removal (size is reduced only when x
# is present in arr[]
def deleteElement(arr, n, x):
# Search x in array
for i in range(n):
if (arr[i] == x):
break
# If x found in array
if (i < n):
# reduce size of array and move
# all elements on space ahead
n = n - 1;
for j in range(i, n, 1):
arr[j] = arr[j + 1]
return n
# Driver Code
if __name__ == '__main__':
arr = [11, 15, 6, 8, 9, 10]
n = len(arr)
x = 6
# Delete x from arr[]
n = deleteElement(arr, n, x)
print("Modified array is")
for i in range(n):
print(arr[i], end = " ")
# This code is contributed by
# Shashank_Sharma
C#
// C# program to remove a given element from
// an array
using System;
class GFG {
// This function removes an element x
// from arr[] and returns new size
// after removal (size is reduced only
// when x is present in arr[]
static int deleteElement(int []arr,
int n, int x)
{
// Search x in array
int i;
for (i = 0; i < n; i++)
if (arr[i] == x)
break;
// If x found in array
if (i < n)
{
// reduce size of array and
// move all elements on
// space ahead
n = n - 1;
for (int j = i; j < n; j++)
arr[j] = arr[j+1];
}
return n;
}
// Driver program to test above function
public static void Main()
{
int []arr = {11, 15, 6, 8, 9, 10};
int n = arr.Length;
int x = 6;
// Delete x from arr[]
n = deleteElement(arr, n, x);
Console.WriteLine("Modified array is");
for (int i = 0; i < n; i++)
Console.Write(arr[i]+" ");
}
}
// This code is contributed by nitin mittal.
Javascript
C++
// C++ program to remove a given element from an array
#include
using namespace std;
// This function removes an element x from arr[] and
// returns new size after removal.
// Returned size is n-1 when element is present.
// Otherwise 0 is returned to indicate failure.
int deleteElement(int arr[], int n, int x)
{
// If x is last element, nothing to do
if (arr[n-1] == x)
return (n-1);
// Start from rightmost element and keep moving
// elements one position ahead.
int prev = arr[n-1], i;
for (i=n-2; i>=0 && arr[i]!=x; i--)
{
int curr = arr[i];
arr[i] = prev;
prev = curr;
}
// If element was not found
if (i < 0)
return 0;
// Else move the next element in place of x
arr[i] = prev;
return (n-1);
}
/* Driver program to test above function */
int main()
{
int arr[] = {11, 15, 6, 8, 9, 10};
int n = sizeof(arr)/sizeof(arr[0]);
int x = 6;
// Delete x from arr[]
n = deleteElement(arr, n, x);
cout << "Modified array is \n";
for (int i=0; i
Java
// Java program to remove a given element from an array
import java.io.*;
class Deletion
{
// This function removes an element x from arr[] and
// returns new size after removal.
// Returned size is n-1 when element is present.
// Otherwise 0 is returned to indicate failure.
static int deleteElement(int arr[], int n, int x)
{
// If x is last element, nothing to do
if (arr[n-1] == x)
return (n-1);
// Start from rightmost element and keep moving
// elements one position ahead.
int prev = arr[n-1], i;
for (i=n-2; i>=0 && arr[i]!=x; i--)
{
int curr = arr[i];
arr[i] = prev;
prev = curr;
}
// If element was not found
if (i < 0)
return 0;
// Else move the next element in place of x
arr[i] = prev;
return (n-1);
}
// Driver program to test above function
public static void main(String[] args)
{
int arr[] = {11, 15, 6, 8, 9, 10};
int n = arr.length;
int x = 6;
// Delete x from arr[]
n = deleteElement(arr, n, x);
System.out.println("Modified array is");
for (int i = 0; i < n; i++)
System.out.print(arr[i]+" ");
}
}
/*This code is contributed by Devesh Agrawal*/
Python3
# python program to remove a given element from an array
# This function removes an element x from arr[] and
# returns new size after removal.
# Returned size is n-1 when element is present.
# Otherwise 0 is returned to indicate failure.
def deleteElement(arr,n,x):
# If x is last element, nothing to do
if arr[n-1]==x:
return n-1
# Start from rightmost element and keep moving
# elements one position ahead.
prev = arr[n-1]
for i in range(n-2,1,-1):
if arr[i]!=x:
curr = arr[i]
arr[i] = prev
prev = curr
# If element was not found
if i<0:
return 0
# Else move the next element in place of x
arr[i] = prev
return n-1
# Driver code
arr = [11,15,6,8,9,10]
n = len(arr)
x = 6
n = deleteElement(arr,n,x)
print("Modified array is")
for i in range(n):
print(arr[i],end=" ")
# This code is contributed by Shrikant13
C#
// C# program to remove a given
// element from an array
using System;
class GFG {
// This function removes an
// element x from arr[] and
// returns new size after
// removal. Returned size is
// n-1 when element is present.
// Otherwise 0 is returned to
// indicate failure.
static int deleteElement(int []arr,
int n,
int x)
{
// If x is last element,
// nothing to do
if (arr[n - 1] == x)
return (n - 1);
// Start from rightmost
// element and keep moving
// elements one position ahead.
int prev = arr[n - 1], i;
for (i = n - 2; i >= 0 &&
arr[i] != x; i--)
{
int curr = arr[i];
arr[i] = prev;
prev = curr;
}
// If element was
// not found
if (i < 0)
return 0;
// Else move the next
// element in place of x
arr[i] = prev;
return (n - 1);
}
// Driver Code
public static void Main()
{
int []arr = {11, 15, 6, 8, 9, 10};
int n = arr.Length;
int x = 6;
// Delete x from arr[]
n = deleteElement(arr, n, x);
Console.WriteLine("Modified array is");
for(int i = 0; i < n; i++)
Console.Write(arr[i]+" ");
}
}
// This code is contributed by anuj_67.
Javascript
输出:
Modified array is
11 15 8 9 10
方法二(搜索时移动元素)
此方法假定元素始终存在于数组中。这个想法是从最右边的元素开始,并在搜索“x”的同时不断移动元素。下面是这种方法的 C++ 和Java实现。请注意,当数组中不存在“x”时,此方法可能会产生意外结果。
C++
// C++ program to remove a given element from an array
#include
using namespace std;
// This function removes an element x from arr[] and
// returns new size after removal.
// Returned size is n-1 when element is present.
// Otherwise 0 is returned to indicate failure.
int deleteElement(int arr[], int n, int x)
{
// If x is last element, nothing to do
if (arr[n-1] == x)
return (n-1);
// Start from rightmost element and keep moving
// elements one position ahead.
int prev = arr[n-1], i;
for (i=n-2; i>=0 && arr[i]!=x; i--)
{
int curr = arr[i];
arr[i] = prev;
prev = curr;
}
// If element was not found
if (i < 0)
return 0;
// Else move the next element in place of x
arr[i] = prev;
return (n-1);
}
/* Driver program to test above function */
int main()
{
int arr[] = {11, 15, 6, 8, 9, 10};
int n = sizeof(arr)/sizeof(arr[0]);
int x = 6;
// Delete x from arr[]
n = deleteElement(arr, n, x);
cout << "Modified array is \n";
for (int i=0; i
Java
// Java program to remove a given element from an array
import java.io.*;
class Deletion
{
// This function removes an element x from arr[] and
// returns new size after removal.
// Returned size is n-1 when element is present.
// Otherwise 0 is returned to indicate failure.
static int deleteElement(int arr[], int n, int x)
{
// If x is last element, nothing to do
if (arr[n-1] == x)
return (n-1);
// Start from rightmost element and keep moving
// elements one position ahead.
int prev = arr[n-1], i;
for (i=n-2; i>=0 && arr[i]!=x; i--)
{
int curr = arr[i];
arr[i] = prev;
prev = curr;
}
// If element was not found
if (i < 0)
return 0;
// Else move the next element in place of x
arr[i] = prev;
return (n-1);
}
// Driver program to test above function
public static void main(String[] args)
{
int arr[] = {11, 15, 6, 8, 9, 10};
int n = arr.length;
int x = 6;
// Delete x from arr[]
n = deleteElement(arr, n, x);
System.out.println("Modified array is");
for (int i = 0; i < n; i++)
System.out.print(arr[i]+" ");
}
}
/*This code is contributed by Devesh Agrawal*/
蟒蛇3
# python program to remove a given element from an array
# This function removes an element x from arr[] and
# returns new size after removal.
# Returned size is n-1 when element is present.
# Otherwise 0 is returned to indicate failure.
def deleteElement(arr,n,x):
# If x is last element, nothing to do
if arr[n-1]==x:
return n-1
# Start from rightmost element and keep moving
# elements one position ahead.
prev = arr[n-1]
for i in range(n-2,1,-1):
if arr[i]!=x:
curr = arr[i]
arr[i] = prev
prev = curr
# If element was not found
if i<0:
return 0
# Else move the next element in place of x
arr[i] = prev
return n-1
# Driver code
arr = [11,15,6,8,9,10]
n = len(arr)
x = 6
n = deleteElement(arr,n,x)
print("Modified array is")
for i in range(n):
print(arr[i],end=" ")
# This code is contributed by Shrikant13
C#
// C# program to remove a given
// element from an array
using System;
class GFG {
// This function removes an
// element x from arr[] and
// returns new size after
// removal. Returned size is
// n-1 when element is present.
// Otherwise 0 is returned to
// indicate failure.
static int deleteElement(int []arr,
int n,
int x)
{
// If x is last element,
// nothing to do
if (arr[n - 1] == x)
return (n - 1);
// Start from rightmost
// element and keep moving
// elements one position ahead.
int prev = arr[n - 1], i;
for (i = n - 2; i >= 0 &&
arr[i] != x; i--)
{
int curr = arr[i];
arr[i] = prev;
prev = curr;
}
// If element was
// not found
if (i < 0)
return 0;
// Else move the next
// element in place of x
arr[i] = prev;
return (n - 1);
}
// Driver Code
public static void Main()
{
int []arr = {11, 15, 6, 8, 9, 10};
int n = arr.Length;
int x = 6;
// Delete x from arr[]
n = deleteElement(arr, n, x);
Console.WriteLine("Modified array is");
for(int i = 0; i < n; i++)
Console.Write(arr[i]+" ");
}
}
// This code is contributed by anuj_67.
Javascript
输出:
Modified array is
11 15 8 9 10
即使给定了要删除元素的索引,从数组中删除元素也需要 O(n) 时间。排序数组的时间复杂度也保持为 O(n)。
在链表中,如果我们知道要删除的节点的前一个节点的指针,我们可以在 O(1) 时间内进行删除。
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。