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