• 删除数组中等于某个key的所有元素


    题目描述:

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

    这道题目做暴力的想法就是,用一个指针从头到尾遍历,删除哪个元素就把后面的元素统一向前移动一个位置。但是这样的时间复杂度很大,可能要移动很多的元素。

    这里利用快速排序中划分的一种思想:用两个指针,后一个指针做遍历用,前一个指针作为一个tag,表示这个tag之前的元素都满足要求

    那么具体的代码:

    int removeElement(vector<int> &arr, int elem) 
    {
    	// write your code here
    	int size = arr.size();
    	if(size == 0)
    	{
    		return 0;
    	}
    	int pre = -1;
    	for(int cur = 0; cur < size; ++cur)
    	{
    		if(arr[cur] != elem)
    		{
    			++pre;
    			if(cur != pre)
    			{
    				swap(arr[pre], arr[cur]);
    			}
    		}//if
    	}//for
    	
    	return pre + 1;
    }
    

      

  • 相关阅读:
    Linux的命令2
    运维书
    管理MariaDB
    MariaDB基础命令
    Linux创建桥接网络
    聚合网络
    kickstart
    VLAN原理
    进程优先和ACL
    计划任务at、crontab
  • 原文地址:https://www.cnblogs.com/stemon/p/4915461.html
Copyright © 2020-2023  润新知