1. ソートされた配列内の重複を削除する
元のリンク: https://leetcode.cn/problems/remove-duplicates-from-sorted-array/
アイデア:ダブル ポインター アルゴリズムを使用すると、時間計算量が O(1) に達する可能性があります。
具体的なプロセス:(図で説明)
コード:
int removeDuplicates(int* nums, int numsSize)
{
if(numsSize==0)
return 0;
int i=0,j=1;
int dst=0;
while(j<numsSize)
{
if(nums[i]==nums[j])
{
++j;
}
else
{
nums[dst]=nums[i];
dst++;
i=j;
j++;
}
}
nums[dst]=nums[i];
dst++;
return dst;
}
2. ソートされた 2 つの配列をマージする
元のタイトルのリンク: https://leetcode.cn/problems/merge-sorted-array/
アイデア: ダブル ポインター演算
実装プロセス:
2 つの配列の最後の要素を指す 2 つの変数 end1、end2 をそれぞれ定義します。
num1[end1] と num2[end2] のサイズを比較し、大きい方の値を配列 1 の後ろから前に順番に移動します。
以下に示すように:
コード:
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
int end1=m-1,end2=n-1;
int end=m+n-1;
while(end1>=0&&end2>=0)
{
if(nums1[end1]>nums2[end2])
{
nums1[end--]=nums1[end1--];
}
else
{
nums1[end--]=nums2[end2--];
}
}
while(end2>=0)
{
nums1[end--]=nums2[end2--];
}
}