Jasin Yip

计蒜客【挑战难题】系列讲解(九)元素移除

题目

第9题:元素移除

  给定一个已经升序排好序的数组,以及一个数target,如果target在数组中,返回它在数组中的位置。

  否则,返回target插入数组后它应该在的位置。
  假设数组中没有重复的数。以下是简单的示例:
  [1,3,5,6], 5 → 2
  [1,3,5,6], 2 → 1
  [1,3,5,6], 7 → 4
  [1,3,5,6], 0 → 0
  提示:输入一个整数n,以及其对应的数组A[n],最后输入target
  searchInsert(int A[], int n, int target)

样例输入

2
3 3
3

样例输出

0

C 实现

#include<stdio.h>
#define MAX 10000
int removeElement(int A[], int n, int elem);
int main(){
    int n, arr[MAX], elem;
    scanf("%d",&n);
    for(int i = 0; i < n; i++){
        scanf("%d",&arr[i]);
    }
    scanf("%d",&elem);
    printf("%d\n",removeElement(arr, n, elem));
    return 0;
}
int removeElement(int A[], int n, int elem){
    int len = n;
    for(int i = 0; i < n; i++){
        if(A[i] == elem)
            len --;
    }
    return len;
}

它如何工作

一看题目,你是否就知道他想要你干嘛呢?根据提示的int removeElement(int A[], int n, int elem);,我们分析得出,我们自定义函数传入的为数组的首地址、数组的长度以及待删除的元素。为什么传入数组的长度呢?根据题目要求:返回剩余数组长度index,而不是让我们返回删除后的数组,那就得出,此题考察数组的遍历。通过一次遍历,没找到与待删除元素相等的值,数组长度就减一。于是,题目解决了。

如有不懂,欢迎加入计蒜客QQ群咨询:

一群:239266679(满)
二群:228348940(满)
三群:159642279
四群:385386446

标签:c语言, 计蒜客, 挑战难题

已有 5 条评论

  1. 13 13

    123

  2. chi chi

    复杂度太大,,,先取最中间那个数,然后决定前面找还是后面找,递归实现就好了。

  3. Yesterday Simply put i saw the website and i came across any Time honored Small & Traditional High buy wow gold http://www.gamesky.com.au/ with 'Navy Blue', nonetheless which often tone will not be offered anymore! Why, due to the fact I must say i would want to organize them throughout Fast!

  4. 能在有生之年看见楼主的这个帖子.实在是我三生之幸啊.看完楼主的这个帖子之后,我竟感发生出一种无以名之的悲痛感――啊,这么好的帖子,如果将来我再也看不到了,那我该怎么办?那我该怎么办?直到我毫不犹豫的把楼主的这个帖子收藏了

  5. 总得留点什么??想来想去,就留个脚印吧。。哈哈

添加新评论