昆山建设局网站,如何制作网站导航栏,编程软件c语言,psd转 wordpress目录
27. 移除元素
26. 删除有序数组中的重复项 88. 合并两个有序数组 27. 移除元素 给你一个数组 nums 和一个值 val#xff0c;你需要 原地 移除所有数值等于 val 的元素#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间#xff0c;你必须仅使用 O(1) 额外…目录
27. 移除元素
26. 删除有序数组中的重复项 88. 合并两个有序数组 27. 移除元素 给你一个数组 nums 和一个值 val你需要 原地 移除所有数值等于 val 的元素并返回移除后数组的新长度。 不要使用额外的数组空间你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 【解法一】
class Solution {
public:int removeElement(vectorint nums, int val) {while(1){int pos 0;for(;pos nums.size(); pos){if(nums[pos] val)break;}if(pos nums.size())break;for(int i pos; i nums.size()-1; i)nums[i] nums[i1];nums.pop_back(); // 注意这里的pop_back()}return nums.size();}
};【解法二】计数覆盖
class Solution {
public:int removeElement(vectorint nums, int val) {int count 0;for(int i 0; i nums.size(); i){if(nums[i] val)count;elsenums[i-count] nums[i];}for(int i 0; i count; i)nums.pop_back();return nums.size();}
}; 26. 删除有序数组中的重复项 给你一个 升序排列 的数组 nums 请你 原地 删除重复出现的元素使每个元素 只出现一次 返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度所以必须将结果放在数组nums的第一部分。更规范地说如果在删除重复项之后有 k 个元素那么 nums 的前 k 个元素应该保存最终结果。 将最终结果插入 nums 的前 k 个位置后返回 k 。 不要使用额外的空间你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 来源力扣LeetCode 链接https://leetcode.cn/problems/remove-duplicates-from-sorted-array 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 【解法一】left代表左半部分right代表右半部分 class Solution {
public:int removeDuplicates(vectorint nums) {int left 0;int right 1;while(right nums.size()){if(nums[left] nums[right])right;elsenums[left] nums[right];}return left1;}
}; 88. 合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2另有两个整数 m 和 n 分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中使合并后的数组同样按 非递减顺序 排列。 注意最终合并后数组不应由函数返回而是存储在数组 nums1 中。为了应对这种情况nums1 的初始长度为 m n其中前 m 个元素表示应合并的元素后 n 个元素为 0 应忽略。nums2 的长度为 n 。 来源力扣LeetCode 链接https://leetcode.cn/problems/merge-sorted-array 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 class Solution {
public:void merge(vectorint nums1, int m, vectorint nums2, int n) {int pos mn-1;while(m-1 0 n-1 0){if(nums1[m-1] nums2[n-1]){nums1[pos--] nums1[m-1];m--;}else{nums1[pos--] nums2[n-1];n--;}}while(n-10){nums1[pos--] nums2[n-1];n--;}}
};