删除元素

给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。

元素的顺序可以改变,并且对新的数组不会有影响。

样例

给出一个数组 [0,4,4,0,0,2,4,4],和值 4

返回 4 并且4个元素的新数组为[0,0,0,2]

思路就是把除删除元素外的元素移到最左边,r是最右端非被删除元素,可以在一开始就找到最右端非被删除元素。用i遍历数组,找到最左端被删除元素,把r所指元素赋到i位置即可。代码里我是先找最左端被删除元素,然后再找最右端非被删除元素。时间复杂度是相同的。

 1 public class Solution {
 2     /**
 3      *@param A: A list of integers
 4      *@param elem: An integer
 5      *@return: The new length after remove
 6      */
 7     public int removeElement(int[] A, int elem) {
 8         int r = A.length - 1;
 9         if(r < 0) return 0;
10         int i = 0;
11
12         while(r > i) {
13             if(A[i] == elem) {
14                 while(A[r] == elem && r > 0) r--;
15                 if(r > i) {
16                     A[i] = A[r];
17                     r--;
18                 }
19             }
20             i++;
21         }
22
23         if(A[r] == elem) r--;
24
25         return r + 1;
26     }
27 }

View Code

转载于:https://www.cnblogs.com/FJH1994/p/5022094.html

删除元素(LintCode)相关推荐

  1. Redis 笔记(04)— list类型(作为消息队列使用、在列表头部添加元素、尾部删除元素、查看列表长度、遍历指定列表区间元素、获取指定区间列表元素、阻塞式获取列表元素)

    Redis 的列表是链表而不是数组.这意味着 list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(n). 当列表弹出了最后一个元素之后,该数据结构自动被删除, ...

  2. python list 删除元素

    python笔记:删除列表元素和根据索引查找元素 </h1><div class="clear"></div><div class=&qu ...

  3. C++ 笔记(23)— STL vector 类(实例化 vector、末尾插入、指定位置插入、数组方式访问元素、指针方式访问元素、删除元素、大小与容量区别)

    1. vector 特点 vector 是一个模板类,提供了动态数组的通用功能,具有如下特点: 在数组末尾添加元素所需的时间是固定的,即在末尾插入元素的所需时间不随数组大小而异,在末尾删除元素也如此: ...

  4. 如何在C ++中从容器中删除元素

    How to remove elements from container is a common C++ interview question, so you can earn some brown ...

  5. 【廖雪峰python入门笔记】list删除元素_pop()

    从list中删除元素 Paul同学刚来几天又要转走了,那么我们怎么把Paul 从现有的list中删除呢? 如果Paul同学排在最后一个,我们可以用list的pop()方法删除: L = ['Adam' ...

  6. python list 删除元素_Python的list循环遍历中,删除数据的正确方法

    初学Python,遇到过这样的问题,在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: num_list = [1, 2, 3, 4, 5]print(num_list)for i ...

  7. 顺序表-顺序表的基本操作(插入元素+删除元素)

    顺序表的存储结构: typedef struct{int data[Maxsize]; //存在顺序表中的元素int length; //存放顺序表的长度}SqList; 一.插入元素 分析: 在顺序 ...

  8. 容器删除元素后迭代器失效_使用迭代器遍历容器元素

    迭代器为我们提供了统一的遍历容器的方式. 1.Iterator源码分析 public Iterator<E> iterator() {return new Itr(); }private ...

  9. jquery 移除border_jQuery - 删除元素

    通过 jQuery,可以很容易地删除已有的 HTML 元素. 删除元素/内容 remove() - 删除被选元素(及其子元素) empty() - 从被选元素中删除子元素 jQuery remove( ...

最新文章

  1. oracle执行计划连接方式
  2. 如何选择容器注册表?这里给出九个选项
  3. 设计模式 — 行为型模式 — 策略模式
  4. Android SurfaceView的生命周期
  5. Oracle 欲放手 Java EE,谁能成为继任者?
  6. feachall php_集合:给 PHP 数组插上翅膀
  7. 【英语学习】【Level 08】U05 Better option L5 A picture is worth a thousand words
  8. 即时通讯安全问题大曝光
  9. 如何将pdf转换成txt破解版
  10. 苹果手机远程服务器桌面,如何用手机APP远程桌面管理Windows云服务器或电脑
  11. linux 查看、关闭、后台程序 【进程】
  12. 驻点、极值点与拐点(判断极值点与拐点的方法)
  13. C语言之for循环应用之断案篇----找凶手
  14. entity framework 新手入门篇(2)-entity framework基本的增删改查
  15. Python|城市公交线路名称获取
  16. 4本建模必读的书籍,每天学一点,获益匪浅
  17. Monty Hall Problem (三门问题)
  18. 万事开头难,开启博客之路
  19. 简单的微信聊天模拟(W-01)
  20. 讲给后台程序员看的前端系列教程(06)——HTML5标签(5)

热门文章

  1. OK6410裸机开发之LED灯
  2. MySQL笔记1:考察内链接、左连接、右连接。
  3. #ifdef __cplusplus extern “C” { #endif的作用!
  4. 二分查找算法的两种实现方式:非递归实现和递归实现
  5. 算法三:无重复字符的最长子串
  6. 汇编:键盘中断(int 9)
  7. Android_SQLite_升级框架
  8. linux文件名通配符:* ? [:digit:]数字 [:lower:]小写字母 [:upper:]大写字母
  9. 回文树(回文自动机) - URAL 1960 Palindromes and Super Abilities
  10. 开启虚拟化技术之旅---1什么是虚拟化?