Leetcode27--->Remove Element(移除数组中给定元素)

题目:给定一个数组array和一个值value,移除掉数组中所有与value值相等的元素,返回新的数组的长度;要求:不能分配额外的数组空间,且必须使用原地排序的思想,空间复杂度O(1);

举例:

Given input array nums = [3,2,2,3]val = 3

Your function should return length = 2, with the first two elements of nums being 2.

解题思路:

1.  首先找到第一个等于value和第一个不等于value的数的位置;

2.  等于value和不等于value之间的数则全部为value;

3.  每次交换时一定是第一个等于value和第一个不等于value的数进行交换;

举例说明:

3,3,3,2,2,3,1,2,4,3,4,3,2 ;  value = 3

1) 初始时:start = 0; index = 3; exchange两个位置的数,结果变为:2,3,3,3,2,3,1,2,4,3,4,3,2;

2) start = 1; index = 4; exchange: 2,2, 3,3,3,3,1,2,4,3,4,3,2;

3) start = 2; index = 5;因为nums[index] = 3,因此index一直递增,直到nums[index] != 3,此时index = 6; exchange: 2,2, 1,3,3,3,3,2,4,3,4,3,2;

4) start = 3; index = 7;exchange: 2,2, 1,2,3,3,3,3,4,3,4,3,2;

5) start = 4; index = 8; exchange: 2,2, 1,2,4,3,3,3,3,3,4,3,2;

6) start = 5; index = 9; nums[index] = 3, index递增,直到index = 10:exchange: 2,2, 1,2,4,4,3,3,3,3,3,3,2;

7) start = 6; index = 11; nums[index] = 3, index递增,直到index = 12: exchange: 2,2, 1,2,4,4,2,3,3,3,3,3,3;

此时start = 7;index = 12 等于数组长度,结束;

代码如下:

 1 public class Solution {
 2     public int removeElement(int[] nums, int val) {
 3         if(nums == null || nums.length < 1){
 4                 return 0;
 5         }
 6         int count = 0;
 7         int index = 0;
 8         while(index < nums.length && nums[index] != val){index ++; count ++;}  //找到第一个等于value的数
 9         int start = index;
10         while(index < nums.length && nums[index] == val){index ++;}  //找到第一个不等于value的数
11         while(start < nums.length && index < nums.length){
12             exchange(nums, start, index);
13             count ++;
14             start ++;
15             while(index < nums.length && nums[index] == val){index ++;}
16
17         }
18         return count;
19     }
20      public static void exchange(int[] nums, int index1, int index2)
21      {
22         int temp = nums[index1];
23         nums[index1] = nums[index2];
24         nums[index2] = temp;
25      }
26 }
时间: 2024-10-28 12:56:13

Leetcode27--->Remove Element(移除数组中给定元素)的相关文章

移除数组中的元素

题目分析:移除数组中的元素可以分为两种情况, 1,不对原数组进行操作: 不对原数组进行操作的,可以新建一个数组,利用数组的栈方法 push,循环数组中的元素,把不等于特定元素的加入新数组. function remove(arr, item) {var res=[];for(var i=0;i<arr.length;i++){if(arr[i]==item){continue}else{res.push(arr[i]);}}return res; } 2,对原数组进行操作:可以利用数组的操作方法

【LeetCode-面试算法经典-Java实现】【027-Remove Element(删除数组中指定的元素)】

[027-Remove Element(删除数组中的元素)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 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

js如何移除数组中指定索引的项

js如何移除数组中指定索引的项:在Array对象中有给定的函数可以删除数组中指定的元素,虽然非常好用,但是总感觉看不到摸不着的比较别扭,下面就分享一个自定义的删除数组指定索引值元素的函数,希望给大家一个全新的思路.代码实例如下: var array=[]; array[0]="蚂蚁部落一"; array[1]="蚂蚁部落二"; array[2]="蚂蚁部落三"; array[3]="蚂蚁部落四"; array[4]="

第11题:移除数组中的重复元素

/* 前几天去爬泰山了,一直没更新,上山时还没什么感觉,下山后简直要崩溃啊,骨头都散了,继续更新...... */ 第11题:移除数组中的重复元素 给定一个升序排列的数组,去掉重复的数,并返回新的数组的长度. 例如: 数组A = {1, 1, 2},你的函数应该返回长度2,新数组为{1, 2} 要求: 不能新开数组分配额外的空间.即常数空间限制. 提示: 输入一个整数n,以及其对应的数组A[n],输出新数组长度 样例输入 5 0 0 1 1 2 样例输出 3 解析: #include <stdi

计蒜客 移除数组中的重复元素

移除数组中的重复元素 给定一个升序排列的数组,去掉重复的数,并返回新的数组的长度. 例如: 数组A = {1, 1, 2},你的函数应该返回长度2,新数组为{1, 2} 要求: 不能新开数组分配额外的空间.即常数空间限制. 提示: 输入一个整数n,以及其对应的数组A[n],输出新数组长度 样例输入 5 0 0 1 1 2 样例输出 3 1 #include<iostream> 2 #include<vector> 3 #define MAX 100000 4 using names

C# 移除数组中重复数据

#region 移除数组中重复数据 /// <summary> /// 移除数组中重复数据 /// </summary> /// <param name="array">需要除重的数组</param> /// <returns>不重复数组</returns> public static string[] DelRepeatData(string[] array) { return array.GroupBy(p =

移除数组中重复数据

#region 移除数组中重复数据 /// <summary> /// 移除数组中重复数据 /// </summary> /// <param name="array">需要除重的数组</param> /// <returns>不重复数组</returns> public static string[] DelRepeatData(string[] array) { return array.GroupBy(p =

08.18 javascript 06 数组 数组的概念 创建数组 读取数组中的元素 稀疏数组 添加和删除数组的元素 数组遍历 多维数组 数组的方法 类数组对象 作为数组的字符串

# 数组 ### 数组的概念 * 数组是值的有序集合 * 数组中的每个值 称之为 元素 * 每个元素可以是任意数据类型的值 * 每个元素都有索引(下标) * 元素的索引从0开始,按照顺序递增. 元素最大的索引 2^32-2 ### 创建数组 * 直接量 `[]` * 构造函方式  `new Array()` ### 读写数组中的元素 * 数组名[索引] ### 稀疏数组 * js数组的索引是连续的 * 没有连续的给元素赋值 , 没有赋值的元素会自动赋值 undefined ### 添加和删除 数

关于固定长度数组中以元素为单位进行的移位操作

例如,数组: int array[5] = {1,2,3,4,5};整体往后循环移1个单元的元素. 最开始代码如下. /** ** @author:hushunfeng ** */ #include<stdio.h> void main() { int array[5] = {1,2,3,4,5}; int i; for(i = 0; i < 5 ; i++) { array[i+1] = array[i]; } for(i=0;i<5;i++) { printf("%d