博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode:Remove Element
阅读量:4964 次
发布时间:2019-06-12

本文共 1241 字,大约阅读时间需要 4 分钟。

Given an array and a value, remove all instances of that value in place and return the new length.

The order of elements can be changed. It doesn't matter what you leave beyond the new length.


题目的意思是把数组中和给定的目标数字不同的元素,全部放到数组的前部

遍历数组,如果在当前位置 i 碰到元素等于给定的目标数字,从数组尾部找一个不等于目标的数字,放到 i 位置

class Solution {public:    int removeElement(int A[], int n, int elem) {        int k = n-1;        for(int i = 0; i <= k; i++)            if(A[i] == elem)            {                while(k > i && A[k] == elem)k--;//从后面找到第一个不是elem的元素                if(k == i)return i;                else A[i] = A[k--];//k位置非elem的元素放到i位置            }        return k+1;    }};

 

其实遍历找到等于目标数字的元素后,只需要把数组尾部元素放到当前位置,不管尾部元素是否为目标数字           

class Solution {public:    int removeElement(int A[], int n, int elem) {        int k = n-1;        for(int i = 0; i <= k;)            if(A[i] == elem)                A[i] = A[k--];//尾部元素放在当前位置            else i++;        return k+1;    }};

 

还有一种思路是把不等于目标数字的元素依次放到首部,如果不等于目标数字的元素较少,这种方法效率更高

class Solution {public:    int removeElement(int A[], int n, int elem) {        int k = 0;        for(int i = 0; i < n; i++)            if(A[i] != elem)A[k++] = A[i];        return k;    }};

 

【版权声明】张转载请注明出处:

转载于:https://www.cnblogs.com/TenosDoIt/p/3793601.html

你可能感兴趣的文章
硬件之美
查看>>
[转载]java开发中的23种设计模式
查看>>
表格的拖拽功能
查看>>
函数的形参和实参
查看>>
文字过长 用 ... 表示 CSS实现单行、多行文本溢出显示省略号
查看>>
1Caesar加密
查看>>
【TP SRM 703 div2 500】 GCDGraph
查看>>
MapReduce 重要组件——Recordreader组件 [转]
查看>>
webdriver api
查看>>
apache 实现图标缓存客户端
查看>>
揭秘:黑客必备的Kali Linux是什么,有哪些弊端?
查看>>
linux系统的远程控制方法——学神IT教育
查看>>
springboot+mybatis报错Invalid bound statement (not found)
查看>>
Linux环境下SolrCloud集群环境搭建关键步骤
查看>>
P3565 [POI2014]HOT-Hotels
查看>>
MongoDB的简单使用
查看>>
hdfs 命令使用
查看>>
prometheus配置
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
java语法之final
查看>>