算法(删除数组元素,删除有序数组中的重复项,合并有序数组)
创始人
2024-11-11 01:11:36
0

文章目录

  • 删除数组元素
    • 删除有序数组中的重复项
      • 合并有序数组

删除数组元素

题目:给定一个值(val),删除数组中与该值相等的元素,返回值为删除后的数组中元素的个数,并打印删除过后的数组元素。
如:给定一个数组 arr [ ] = {1,2,2,3,4},val = 2
输出结果:arr[ ] = {1,3,4 }

思路:

  1. 分别定义两个整型变量src和dst,同时指向数组中下标为0的元素
  2. 用src去判断该值是否与val相等,相等的话src++继续去判断下一个值,否则就将src指向的值赋给dst,循环下去,知道src遍历完整个数组。
  3. 遍历完之后,返回值就是dst
    在这里插入图片描述
    代码如下:
int fun(int* nums, int Numsize, int val) { 	int src = 0; 	int dst = 0; 	while (src < Numsize) 	{ 		if (nums[src] != val && dst != src) 		{ 			nums[dst++] = nums[src]; 		} 		src++; 	} 	return dst; }  int main() { 	int nums[] = { 1,1,2,2,3,3,4 }; 	int val = 3; 	int sz = fun(nums, sizeof(nums) / sizeof(nums[0]), val); 	for (int i = 0; i < sz; i++) 	{ 		printf("%d ", nums[i]); 	} 	return 0; } 

删除有序数组中的重复项

题目:在有序数组中找出重复的元素,并删除,返回值为删除后的元素的个数,并打印删除后的数组中的元素。
如:给定一个数组 arr[ ] = { 1,1,2,3,3,4};
打印结果:arr [ ] = {1,2,3,4};

思路:

  1. 同样的,分别定义两个整型变量,src和dst,src指向下标为1的元素,dst指向下标为0的元素
  2. 若两个整型变量指向的元素不相等,dst++,src指向的元素再赋给dst,否则src++,继续去判断下一个元素,直到src遍历完整个数组
  3. 因为dst是先++,再被赋值,所以返回值为dst + 1
    在这里插入图片描述
    代码如下:
int fun(int* nums, int Numsize) { 	int src = 1; 	int dst = 0; 	while (src < Numsize) 	{ 		if (nums[dst] != nums[src] && dst != src) 		{ 			nums[++dst] = nums[src]; 		} 		src++; 	} 	return dst + 1; }  //思路:1.用两个整型变量分别指向第一个和第二个元素。 //      2.nums[src] != nums[dst]时,dst++,nums[dst] = nums[src],src++;相等时,src++ int main() { 	int nums[] = { 1,2,3,3,4,5,5 }; 	int sz = fun(nums, sizeof(nums) / sizeof(nums[0])); 	for (int i = 0; i < sz; i++) 	{ 		printf("%d ", nums[i]); 	} 	return 0; } 

合并有序数组

题目:将两个有序数组进行合并,m和n分别为第一个数组(nums1)中有效元素的个数,第二个数组(nums2)的大小。nums1的大小为m + n. 将合并后的数,存储到nums1中,并打印nums1中的元素。
如:nums1[6] = {4,5,6,0,0,0};nums2[ 3 ] = {1,2,3};
打印结果:nums1[6] = {1,2,3,4,5,6};

思路:

  1. 定义三个整型变量,l1,l2,l3, 其中,l1代表m - 1(指向nums1中有效元素的最后一个元素),l2代表n - 1(指向nuns2中的最后一个元素),l3代表m + n - 1(指向nuns1的最末尾的空间)
  2. 在l1和l2都大于等于0的情况下,将l1与l2指向的元素进行比较,谁大就将指向的元素赋值给nums1[l3],并且l1-- (l2–),l3–
  3. 若l1提前遍历完了有效元素,而l2还没有遍历完的情况下,则可以直接用一个循环来将nums2中没遍历完的元素放入nums1中
  4. 若l2提前遍历完了元素,而l1还没有遍历完的情况下,就无需再进行遍历了,直接跳出函数
    在这里插入图片描述
    代码如下:
void fun(int* nums1, int* nums2, int m, int n) { 	int l1 = m - 1; 	int l2 = n - 1; 	int l3 = m + n - 1; 	while (l1 >= 0 && l2 >= 0) 	{ 		if (nums1[l1] < nums2[l2]) 		{ 			nums1[l3--] = nums2[l2--]; 		} 		else 		{ 			nums1[l3--] = nums1[l1--]; 		} 	} 	while (l2 >= 0) 	{ 		nums1[l3--] = nums2[l2--]; 	} }  int main() { 	int nums1[6] = { 4,5,6 }; 	int nums2[] = { 1,2,3 }; 	fun(nums1, nums2, 3, 3); 	for (int i = 0; i < 6; i++) 	{ 		printf("%d ", nums1[i]); 	} 	return 0; } 

相关内容

热门资讯

两分钟辅助!阿拉游戏中心辅助工... 两分钟辅助!阿拉游戏中心辅助工具苹果版,总是是有辅助技巧(真实有挂)1、完成阿拉游戏中心辅助工具苹果...
第6分钟辅助!来趣广西友玩脚本... 第6分钟辅助!来趣广西友玩脚本辅助,一直是真的有辅助方法(有挂方法);1、许多玩家不知道来趣广西友玩...
第七分钟辅助!如何下载安装胡乐... 第七分钟辅助!如何下载安装胡乐辅助脚本,真是是有辅助神器(有挂规律)如何下载安装胡乐辅助脚本辅助器是...
第九分钟辅助!新导游正版辅助,... 第九分钟辅助!新导游正版辅助,原来真的是有辅助攻略(有挂规律)一、新导游正版辅助可以开透视的定义与意...
第一分钟辅助!微信开心泉州辅助... 第一分钟辅助!微信开心泉州辅助器,真是是有辅助脚本(有挂透视)1、完成微信开心泉州辅助器辅助器v3....
第7分钟辅助!来几局辅助器,好... 第7分钟辅助!来几局辅助器,好像是真的有辅助技巧(有挂规律)来几局辅助器辅助器是一种具有地方特色的麻...
第四分钟辅助!人海大厅反杀,原... 第四分钟辅助!人海大厅反杀,原来真的是有辅助攻略(发现有挂)1、起透看视 人海大厅反杀辅助软件价格2...
三分钟辅助!湛江吴川0759作... 三分钟辅助!湛江吴川0759作弊,原来有辅助插件(有挂方针)湛江吴川0759作弊能透视中分为三种模型...
第九分钟辅助!威信茶馆透视辅助... 第九分钟辅助!威信茶馆透视辅助工具,确实真的是有辅助软件(有挂技巧)1、金币登录送、破产送、升级送、...
第九分钟辅助!决战手游辅助,真... 第九分钟辅助!决战手游辅助,真是是有辅助工具(有挂技巧)1、游戏颠覆性的策略玩法,独创攻略技巧玩法,...