C语言经典算法题之原地删除指定元素

简介: C语言经典算法题之原地删除指定元素


27. 移除元素 - 力扣(LeetCode)


思路:


由于题目要求原地删除指定元素,所以只能再题目提供的数组进行操作,而不能创建新的数组。


这时我们应该利用多个下标的一起遍历数组的方法


具体操作参考以下代码和对应注释:


int main()
{
  int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  int val = 0;
  scanf("%d", &val);//指定要删除的元素
  int real = 0;
  int cur = 0;
  int i = 0;
  int count = sz;
  while (i < sz)//遍历数组
  {
    //如果该元素不是需要删除的元素,则把它赋值给arr数组下标为real的位置,覆盖下标real本身 
        //的内容,i下标往下走继续遍历,real坐标也需要往下走
    if (arr[i] != val)
    {
      arr[real] = arr[i];
      i++;
      real++;
    }
    //遇到需要删除的元素则无需赋值给arr数组下标为real的位置,i继续往下走,直到遇到不是要删 
        //除的元素。
    else
    {
      i++;
      count--;//count一开始等于sz,每删除一个元素count--,最后得到删除指定元素之后剩余 
                    //的元素个数
    }
  }
  for (i = 0; i < count; i++)
  {
    printf("%d ", arr[i]);
  }
  return 0;
}


如果力扣上做题应写成如下形式:


int removeElement(int* arr, int sz, int val)
{
    int real=0;
    int cur=0;
    int count=sz;
    while(cur<sz)
    {
        if(arr[cur]!=val)
        {
            arr[real]=arr[cur];
            real++;
            cur++;
        }
        else
        {
           cur++;
           count--;
        }
    }
    return count;
}
相关文章
|
5天前
|
算法 搜索推荐 C语言
C语言中的经典算法实现
C语言中的经典算法实现
12 1
|
9天前
|
测试技术 C语言
C语言每日一练Day03——移除元素
C语言每日一练Day03——移除元素
|
13天前
|
存储 搜索推荐 算法
C语言数据结构算法,常用10种排序实战
插入排序(Insertion Sort) 希尔排序(Shell Sort) 选择排序(Selection Sort) 冒泡排序(Bubble Sort) 归并排序(Merge Sort) 快速排序(Quick Sort) 堆排序(Heap Sort) 基数排序(Radix Sort)
11 1
C语言数据结构算法,常用10种排序实战
|
14天前
|
算法 C语言
Leetcode_203.移除链表元素—C语言
Leetcode_203.移除链表元素—C语言
|
15天前
|
算法 C语言
约瑟夫环的C语言和86/88汇编非递归算法
约瑟夫环的C语言和86/88汇编非递归算法
21 0
|
16天前
|
算法 C语言
KMP算法(C语言实现)
KMP算法(C语言实现)
20 0
|
21天前
|
算法 C语言 人工智能
|
21天前
|
算法 C语言
【C语言】求最小新整数(贪心算法)
【C语言】求最小新整数(贪心算法)
16 1
|
21天前
|
算法 C语言
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-2
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
21天前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结