27.移除元素+88.合并两个有序数组
目录
一、移除元素
(一)题目
(二)代码
二、合并两个有序数组
(一)题目
(二)代码
一、移除元素
27. 移除元素 - 力扣(LeetCode)
(一)题目
(二)代码
#include<iostream>
#include<algorithm>
#include<vector>
#define MAX 100
using namespace std;
int removeElement(vector<int>& nums, int val) {int len = nums.size();for (int i = 0; i < nums.size(); i++){if (nums[i] == val){len--;}}int k = 0;for (int i = 0; i < nums.size(); i++)//寻找等于val的元素{if (nums[i] == val){k = i;//用k记录等于val元素的下标}for (int j = i + 1; j < nums.size(); j++)//寻找不等于val的元素{if (nums[j] != val){swap(nums[j], nums[k]);break;}}}return len;
}
int main()
{int n = 0,x=0;vector<int>a(MAX,0);cout << "请输入数据个数:";cin >> n;cout << "请依次输入数据:";for (int i = 0; i < n; i++){cin >> a[i];}cout << "请输入val的值:";cin >> x;int y= removeElement(a, x);for (int i = 0; i < n; i++){cout<<a[i]<< " ";}return 0;
}
二、合并两个有序数组
(一)题目
88. 合并两个有序数组 - 力扣(LeetCode)
(二)代码
用双指针
#include<iostream>
#include<algorithm>
#include<vector>
#define MAX 1000
using namespace std;
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
{vector<int>nums3(m+n,0);int i = 0, j = 0,k=0;int tmp = 0;while (i < m && j < n){if (nums1[i] < nums2[j]){nums3[k++] = nums1[i++];}else{nums3[k++] = nums2[j++];}}while (i < m){nums3[k++] = nums1[i++];}while (j < n){nums3[k++] = nums2[j++];}for (int a = 0; a < m + n; a++){nums1[a] = nums3[a];}}//void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
//{
// vector<int>nums3(m + n, 0);
// int i = 0, j = 0,k=0;
// int tmp = 0;
//
// while (i < m || j < n)
// {
// if (i == m)
// tmp = nums2[j++];
// else if (j == n)
// tmp = nums1[i++];
// else if (nums1[i] < nums2[j])
// tmp = nums1[i++];
// else
// {
// tmp = nums2[j++];
// }
//
// nums3[k++] = tmp;
// }
// for (int a = 0; a < m + n; a++)
// {
// nums1[a] = nums3[a];
// }
// }
int main(){int m = 0,n=0;vector<int>_nums1(MAX, 0);vector<int>_nums2(MAX, 0);cout << "请依次输入nums1,nums2数组数据个数:";cin >> m >> n;cout << "请依次输入nums1数组的数据:";for (int i = 0; i < m; i++){cin >> _nums1[i];}cout << "请依次输入nums2数组的数据:";for (int i = 0; i < n; i++){cin >> _nums2[i];}merge(_nums1, m, _nums2, n);for (int k = 0; k < m + n; k++){cout << _nums1[k] << " ";}return 0;
}