python列表删除重复项_26. 删除排序数组中的重复项

删除排序数组重复项
本文介绍了一种在原地删除已排序数组中重复元素的方法,确保每个元素仅出现一次,并返回新长度。提供了两种实现方式,一种利用STL set容器,另一种通过遍历有序数组实现O(N)的时间复杂度。

c749eb83a412c1747769b4447ed02e4d.png

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

示例 1:

给定数组 nums = [1,1,2],

函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。

你不需要考虑数组中超出新长度后面的元素。

示例 2:

给定 nums = [0,0,1,1,1,2,2,3,3,4],

函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。

你不需要考虑数组中超出新长度后面的元素。

来源:力扣(LeetCode)

链接:26. 删除排序数组中的重复项 - 力扣(LeetCode)

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法一:直接使用stl容器 set,将相同的元素过滤掉,缺点是需要进行两次元素拷贝,时间复杂素是O(N*lgN),代码如下:

class Solution {
public:
    int removeDuplicates(vector<int>& nums)
	{
		int len = nums.size();
		if(0 == len)
			return 0;

		set<int> se;
		for(int i=0;i<len;i++)
		{
			se.insert(nums[i]);
		}
		nums.clear();
		for(auto it = se.begin();it!=se.end();++it)
		{
			nums.push_back(*it);
		}
		return se.size();

    }
};

方法二:利用给定的数组的特征,是有序的,时间复杂度是O(N),代码如下:

class Solution {
public:
    int removeDuplicates(vector<int>& nums)
	{
		int len = nums.size();
		if(0 == len)
			return 0;


		int k=0;
		for(int i=1;i<len;i++)
		{
			if(nums[i]!=nums[k])
			{
				nums[++k] = nums[i];
			}
		}

		return ++k;

    }
};
内容概要:本文围绕高比例可再生能源并网背景下虚拟电厂的多时间尺度调度问题展开研究,重点解决系统灵活性与储能成本之间的平衡挑战。通过构建日前调度与日内调度的双层优化模型,整合风电、光伏等不确定性出力与多用户负荷的灵活性资源,同时引入储能系统容量衰减模型,提升调度方案的经济性与可持续性。研究采用Matlab进行仿真验证,实现了对储能充放电行为的精细化管理,并结合先进优化算法求解非线性约束下的复杂调度问题,有效降低了系统运行成本,增强了电网对可再生能源的消纳能力。; 适合人群:具备电力系统、可再生能源或优化调度基础知识的研究生、科研人员及工程技术人员,熟悉Matlab编程与数学建模者更佳; 使用场景及目标:①用于高比【顶级SCI复现】高比例可再生能源并网如何平衡灵活性与储能成本?虚拟电厂多时间尺度调度及衰减建模(Matlab代码实现)例新能源接入场景下的虚拟电厂能量管理系统设计;②支撑含储能系统的多时间尺度调度策略研究,提升调度精度与设备寿命;③为SCI论文复现与科研课题提供可扩展的技术框架与代码基础; 阅读建议:建议结合文中提到的Matlab代码实现部分,逐步运行并理解模型构建、约束设定与求解流程,重点关注储能衰减建模与灵活性资源协调机制的设计思路,宜配合YALMIP、CPLEX等工具包进行调试与优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值