国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言每日一題:6.移除元素+合并兩個有序數(shù)組。

這篇具有很好參考價值的文章主要介紹了C語言每日一題:6.移除元素+合并兩個有序數(shù)組。。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

第一題:移除元素

C語言每日一題:6.移除元素+合并兩個有序數(shù)組。,c語言,算法,數(shù)據結構

思路一:

一:暴力查找的方法:
1.找到對應val值的下標,返回數(shù)組的下標。
2.刪除對應的下標,從前向后用后面覆蓋前面。當后一個是數(shù)組最后一個數(shù)值是就賦值結束了(注意數(shù)組越界的問題)。
3.刪除了一個數(shù)之后數(shù)組元素個數(shù)要–。
4.查找和刪除是在一個循環(huán)里面因為val的值可能在數(shù)組中出現(xiàn)多次,直到返回的下標的值沒有了,就結束了循環(huán),val的數(shù)值都移除完了。

// 順序表查找
int SeqListFind(int* ps, int x,int nume)
{
	//遍歷查找
	int n = nume;
	for (int i = 0; i < n; i++)
	{
		if (ps[i] == x)
		{
			return i;
		}
	}
	return -1;
}
// 順序表刪除pos位置的值
void SeqListErase(int* ps, int pos,int num)
{
	int n = num;
	for (int i = pos; i < n-1; i++)
	{
		ps[i] = ps[i+1];
	}
}


int removeElement(int* nums, int numsSize, int val){
    while(1)
    {
        int b=SeqListFind(nums,val,numsSize);
        if(b==-1)
        {
            break;
        }
        else
        {
            SeqListErase(nums,b,numsSize);
            numsSize--;
        }
    }
    return numsSize;
}

思路二:

二:使用雙指針的方法
1.不要使用額外的數(shù)組空間,你必須僅使用 O(1) 額外空間并 原地 修改輸入數(shù)組。
2.定義兩個下標:src和dis,他們開始的時候是在一起的對應的數(shù)組值都不是val的時候,同時++。
3.只要src位置是val就src++;
4.當src位置不是val就把src位置的值賦值到dis,到src>n-1循環(huán)結束

int removeElement(int* nums, int numsSize, int val)
{
    int src=0;
    int dis=0;
    int n=numsSize;
    int count=0;
    while(src<=n-1)
    {
        if((src==dis) && (nums[src]!=val))
        {
            src++;
            dis++;
        }
        else if((nums[src]==val))
        {
            src++;
            count++;
        }
        else if((nums[src]!=val))
        {
            nums[dis]=nums[src];
            src++;
            dis++;
        }
    }
    return n-count;
}

第二題:

C語言每日一題:6.移除元素+合并兩個有序數(shù)組。,c語言,算法,數(shù)據結構
第二題:

思路一:

一.雙指針的方法
1.定義p1,p2 兩個變量,初始化為0從兩個數(shù)組開頭開始向后移動。
2.同時比較nums1[p1]和nums2[p2]這兩個位置的數(shù)值。
3.開辟一個新的數(shù)組大小為m+n兩個數(shù)組長度的和。
4.在比較的過程中較小的值放到新的數(shù)組,開辟數(shù)組的下標++,小的值的數(shù)組的下標++。
5.結束條件p1>=m 中有一個 p2>=n就結束。
6.出來之后另一個沒有放完,p1=m,說明nums2沒有放完。反之同理。
7.tmp拷貝回去到nums1中
空間復雜度是O(N)時間復雜度O(2*(M+N));

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
    int p1=0;
    int p2=0;
    int* tmp=(int*)malloc(sizeof(int)*(m+n));
    int i=0;

    while((p1<m)&&(p2<n))
    {
        
        if(nums1[p1]>=nums2[p2])
        {
                *(tmp+i)=nums2[p2];
                p2++;
                i++;
                continue;
        }

        else if(nums1[p1]<nums2[p2])
        {
                *(tmp+i)=nums1[p1];
                p1++;
                i++;
                continue;
        }
    }

     if(p1>m-1)
        {
            memcpy(tmp+i,nums2+p2,sizeof(int)*(n-p2));
        }
     else if(p2>n-1)
        {
            memcpy(tmp+i,nums1+p1,sizeof(int)*(m-p1));
        }



    memcpy(nums1,tmp,sizeof(int)*(m+n));
}

思路二:

三指針的方法:
1.p1起始位置是m-1,p2起始位置是n-1.數(shù)組值的尾。
2.end起始位置是(m+n)-1在nums1上。
3.分別從尾開始比較賦值到nums1[end]位置,誰賦值過去對應的p就–,end–。
4.當p1==-1,p2還沒有結束需要把值賦值到對應的num1上。
5.當p2==-1就說明已經結束。
時間復雜度優(yōu)化到了O(m+n)
C語言每日一題:6.移除元素+合并兩個有序數(shù)組。,c語言,算法,數(shù)據結構文章來源地址http://www.zghlxwxcb.cn/news/detail-609726.html

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){

        int p1=m-1;
        int p2=n-1;
        int end=(m+n)-1;

        while(p1>=0 && p2>=0)
        {
            if(nums1[p1]>nums2[p2])
            {
                nums1[end]=nums1[p1];
                p1--;
                end--;
            }
            else
            {
                nums1[end]=nums2[p2];
                p2--;
                end--;
            }
        }

        while(p2>=0)
        {
            nums1[end]=nums2[p2];
            p2--;
            end--;
        }
}

到了這里,關于C語言每日一題:6.移除元素+合并兩個有序數(shù)組。的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Leetcode每日一題——“合并兩個有序數(shù)組”

    Leetcode每日一題——“合并兩個有序數(shù)組”

    各位CSDN的uu們你們好呀,又到小雅蘭的愉快題解時候啦,今天,我們的題目內容是合并兩個有序數(shù)組,下面,讓我們進入合并兩個有序數(shù)組的世界吧 示例 1: 輸入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 輸出:[1,2,2,3,5,6] 解釋:需要合并 [1,2,3] 和 [2,5,6] 。 合并結果是 [ 1,2

    2023年04月24日
    瀏覽(37)
  • 力扣每日一題88:合并兩個有序數(shù)組

    給你兩個按? 非遞減順序 ?排列的整數(shù)數(shù)組? nums1 ? 和? nums2 ,另有兩個整數(shù)? m ?和? n ?,分別表示? nums1 ?和? nums2 ?中的元素數(shù)目。 請你? 合并 ? nums2 ? 到? nums1 ?中,使合并后的數(shù)組同樣按? 非遞減順序 ?排列。 注意: 最終,合并后數(shù)組不應由函數(shù)返回,而是存儲在

    2024年02月07日
    瀏覽(24)
  • 圖靈日記之Leetcode刪除有序數(shù)組中的重復項&&合并兩個有序數(shù)組&&移除鏈表元素

    給你一個 非嚴格遞增排列 的數(shù)組 nums ,請你 原地 刪除重復出現(xiàn)的元素,使每個元素 只出現(xiàn)一次 ,返回刪除后數(shù)組的新長度。元素的 相對順序 應該保持 一致 。然后返回 nums 中唯一元素的個數(shù)。 考慮 nums 的唯一元素的數(shù)量為 k ,你需要做以下事情確保你的題解可以被通過

    2024年02月04日
    瀏覽(21)
  • 2023-08-13 LeetCode每日一題(合并兩個有序數(shù)組)

    2023-08-13 LeetCode每日一題(合并兩個有序數(shù)組)

    點擊跳轉到題目位置 給你兩個按 非遞減順序 排列的整數(shù)數(shù)組 nums1 和 nums2,另有兩個整數(shù) m 和 n ,分別表示 nums1 和 nums2 中的元素數(shù)目。 請你 合并 nums2 到 nums1 中,使合并后的數(shù)組同樣按 非遞減順序 排列。 **注意:**最終,合并后數(shù)組不應由函數(shù)返回,而是存儲在數(shù)組 num

    2024年02月13日
    瀏覽(28)
  • 【力扣每日一題】2023.8.13 合并兩個有序數(shù)組

    【力扣每日一題】2023.8.13 合并兩個有序數(shù)組

    目錄 題目: 示例: 分析: 代碼: 題目給我們兩個升序數(shù)組,讓我們合并它們,要求合并之后仍然是升序,并且這個合并操作是在數(shù)組1原地修改的。數(shù)組1的有效數(shù)據長度為 m ,而數(shù)組1的長度為 m + n,n 是數(shù)組2的有效數(shù)據長度以及數(shù)組的長度。 比較直觀容易想到的做法就是

    2024年02月12日
    瀏覽(26)
  • 【力扣每日一題】88. 合并兩個有序數(shù)組 &雙指針 & 輔助數(shù)組 & 8.13打卡

    【力扣每日一題】88. 合并兩個有序數(shù)組 &雙指針 & 輔助數(shù)組 & 8.13打卡

    88. 合并兩個有序數(shù)組 難度: 簡單 描述: 給你兩個按 非遞減順序 排列的整數(shù)數(shù)組 nums1 和 nums2,另有兩個整數(shù) m 和 n ,分別表示 nums1 和 nums2 中的元素數(shù)目。 請你 合并 nums2 到 nums1 中,使合并后的數(shù)組同樣按 非遞減順序 排列。 注意:最終,合并后數(shù)組不應由函數(shù)返回,而

    2024年02月09日
    瀏覽(23)
  • 力扣經典150題第一題:合并兩個有序數(shù)組

    合并兩個有序數(shù)組問題詳解與解決方法 1. 介紹 在編程面試中,合并兩個有序數(shù)組是一個經典的問題。它要求將兩個有序數(shù)組合并為一個新的有序數(shù)組。本篇博客將深入討論這個問題,并提供解決方法。 2. 問題描述 給你兩個按 非遞減順序 排列的整數(shù)數(shù)組 nums1 和 nums2,另有兩

    2024年04月23日
    瀏覽(28)
  • ( 數(shù)組) 27. 移除元素 ——【Leetcode每日一題】

    ( 數(shù)組) 27. 移除元素 ——【Leetcode每日一題】

    難度:簡單 給你一個數(shù)組 nums 和一個值 val ,你需要 原地 移除所有數(shù)值等于 val 的元素,并返回移除后數(shù)組的新長度。 不要使用額外的數(shù)組空間,你必須僅使用 O(1) 額外空間并 原地 修改輸入數(shù)組。 元素的順序可以改變。你不需要考慮數(shù)組中超出新長度后面的元素。 說明

    2024年02月08日
    瀏覽(41)
  • “三指針法“合并兩個有序數(shù)組(力扣每日一練)

    “三指針法“合并兩個有序數(shù)組(力扣每日一練)

    ? ? ? ? 我的第一想法確實是:先合并數(shù)組,再排序,搞完。 ? ? ? ? 哈哈哈,想那么多干嘛,目的達成了就好了。 力扣官方題解是雙指針: 還有糕手: Python: C#: ? ? ? 總結 ? ? ? ? 可以稱之為\\\"三指針\\\" 方法,因為我們同時使用了三個指針(p1、p2 和 p)來操作和遍歷兩

    2024年02月02日
    瀏覽(22)
  • 力扣每日一道系列 --- LeetCode 88. 合并兩個有序數(shù)組

    力扣每日一道系列 --- LeetCode 88. 合并兩個有序數(shù)組

    ?? 江池?。?個人主頁 ??個人專欄: ?數(shù)據結構探索 ?LeetCode每日一道 ?? 有航道的人,再渺小也不會迷途。 LeetCode 88. 合并兩個有序數(shù)組 首先創(chuàng)建一個臨時數(shù)組,其大小為第一個數(shù)組的大?。磏ums1Size),其作用主要是。 通過循環(huán)遍歷兩個數(shù)組,將兩個數(shù)組元素比較后較

    2024年02月04日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包