首页 > 编程语言 >原地算法

原地算法

时间:2023-06-20 11:06:53浏览次数:39  
标签:numsSize index nums int 原地 ++ 算法


在只使用O(1)的的额外空间的情况下在原地修改输入数组.
例如:
给定nums=[0,0,1,1,1,2,2,3,3,4],删去重复的元素,返回长度为5,元素为[0,1,2,3,4];
函数代码实现为:

int removeDuplicates(int* nums, int numsSize) //原地算法
{
    int i;
if (nums == NULL || numsSize == 0) return 0;
	 int index = 0;
	 for (int i = 1; i < numsSize; i++) {
		 if (nums[index] != nums[i]) {
			 index++;
			 nums[index] = nums[i];
		 }
	 }
     for (i = 0; i < index+1; i++)
			 printf("%d", nums[i]);
	 return index + 1;
}

直接利用指针移动将前面重复的元素占掉,然后在输出时直接输出前面修改过的个体.


标签:numsSize,index,nums,int,原地,++,算法
From: https://blog.51cto.com/u_16165815/6521247

相关文章

  • 代码随想录算法训练营第十二天| 递归遍历 (必须掌握)迭代遍历 统一迭代
    递归遍历重点:1,TreeNode的自定义2,val=0== val=NULL;代码:1voidpreRecursor(TreeNode*root,vector<int>&result)2{3if(root==NULL)4return;5result.push_back(root->val);6preRecursor(root->left,result);7......
  • Base64加密算法以及在IDA中的识别
    Base64加密算法以及在IDA中的识别一、何为Base64算法?Base64是一种基于64个可打印字符来表达二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元。对于某个可打印字符。为什么这样说呢?我们首先了解一下Base64是如何设计的。3个字节有24个比特,在Base64中6个比特一......
  • Go 设计模式|组合,一个对数据结构算法和职场都有提升的设计模式
    Go设计模式|组合,一个对数据结构算法和职场都有提升的设计模式原创 KevinYan11 网管叨bi叨 2023-01-1608:45 发表于北京收录于合集#用Go学设计模式24个大家好,我是每周在这里陪你进步的网管~,这次我们继续设计模式的学习之旅。本次要学习的是组合模式,这个模式呢,平时要做......
  • PSO算法
    1、简介PSO算法,即粒子群优化算法(ParticleSwarmOptimization),是一种进化计算技术。它的基本思想源于对鸟类群体行为进行建模与仿真的研究结果的启发。它利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得问题的可行解。PSO算......
  • 深度优先搜索算法-dfs讲解
    迷宫问题有一个迷宫:S**.....***T(其中字符S表示起点,字符T表示终点,字符*表示墙壁,字符.表示平地。你需要从S出发走到T,每次只能向上下左右相邻的位置移动,不能走出地图,也不能穿过墙壁,每个点只能通过一次。)现在需要你求出是否可以走出这个迷宫我们将这个走迷宫过程称为dfs(深度优先搜索)......
  • 【学习笔记】万能欧几里得算法
    没空写了,回头补下。先放个板子。structNode{Nodeoperator*(Nodeb){//...}};Nodepow(Nodea,longlongb){Nodeans;while(b){if(b&1)ans=ans*a;a=a*a;b>>=1;}returnans;}Node......
  • Manacher算法学习笔记
    Manacher算法是什么Manacher算法就是马拉车。Manacher算法就是用于解决回文子串的个数的。问题引入P3805:【模板】manacher算法题目大意给出一个只由小写英文字符\(\texttta,\textttb,\textttc,\ldots\texttty,\textttz\)组成的字符串\(S\),求\(S\)中最长回文串......
  • 算法题总结-均等划分
    原题https://leetcode.cn/problems/partition-to-k-equal-sum-subsets/submissions/给定一个整数数组nums和一个正整数k,找出是否有可能把这个数组分成k个非空子集,其总和都相等。[1<=k<=len(nums)<=16]输入示例nums=[4,3,2,3,5,2,1],k=4输出示例True......
  • 代码随想录算法训练营第十一天| 239. 滑动窗口最大值 347.前 K 个高频元素
    239.滑动窗口最大值 难点:1,想好怎么快速找到区块内的最大数值,往常使用的是在遍历一次,但是是O(m*n)思路:1,使用单调队列,所有的数值都必须是从大到小,2,用队列保持必要的顺序,而且对于大于K的循环,每次都要求poppush这两个操作代码:1voidpop(deque<int>&slidingWin......
  • 算法与数据结构Day03——平衡二叉树的根
    #include<stdio.h>#include<stdlib.h>typedefstructnode*AVLTree;structnode{intData;AVLTreeLeft;AVLTreeRight;};intHigh(AVLTreeT){if(!T)return0;intleft=High(T->Left)+1;intright=High(T->......