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

C語言每日一題:5.至少是其他數字的兩倍+兩個數組的交集。

這篇具有很好參考價值的文章主要介紹了C語言每日一題:5.至少是其他數字的兩倍+兩個數組的交集。。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

第一題:至少是兩倍其他數字的最大數

C語言每日一題:5.至少是其他數字的兩倍+兩個數組的交集。,c語言,開發(fā)語言

第一題:

思路一:

1.需要我們返回最大數值的下標,所以先循環(huán)遍歷我們的這個數組記錄一下最大的數值和下標位置。
2.使用qsort排序(總是存在唯一的最大整數)
3所以排序之后的數組的倒數第二個元素就是除了最后一個元素在數組中最大的。
4.只需要判斷這個數的兩倍是否小于等于最大的數值。
5.注意題目的特殊情況是數組中只存在一個元素的時候,這個時候默認他就是最大的直接返回下標0.

int cmp(void* p1,void*p2)
{
    return ((*(int*)p1))-((*(int*)p2));
}

int dominantIndex(int* nums, int numsSize){

    if(numsSize==1)
    return 0;

    int MAX=0;
    int tmp=0;
    for(int i=0;i<numsSize;i++)
    {
        if(nums[i]>MAX)
        {
            MAX=nums[i];
            tmp=i;
        }
    }

    qsort(nums,numsSize,sizeof(nums[0]),cmp);
    if(2*nums[numsSize-2]<=MAX)
    {
        return tmp;
    }

    return -1;
}

總結:這個方法的時間復雜度O(log^n+1)n

思路二:

1.可以使用雙指針的方法在一次循環(huán)遍歷中就找到最大的數和次大的數值。
2.定義MAX和MAX_2用來保存。
3.存在最大的數值已經不能更改了,數組后面還存在次大的數值。需要MAX_2去循環(huán)遍歷。

int dominantIndex(int* nums, int numsSize){

    if(numsSize==1)
    return 0;

    int MAX=0;
    int MAX_2=0;
    int tmp=0;
    for(int i=0;i<numsSize;i++)
    {
        if(nums[i]>MAX)
        {
            MAX_2=MAX;
            MAX=nums[i];
            tmp=i;
        }
        else
        {
            //一個數組需要走完的
            if(nums[i]>MAX_2)
            MAX_2=nums[i];
        }
    }

    if(MAX_2*2<=MAX)
    {
        return tmp;
    }
    return -1;
}

第二題:兩個數組的交集

C語言每日一題:5.至少是其他數字的兩倍+兩個數組的交集。,c語言,開發(fā)語言
第二題:

思路一:

1.動態(tài)開辟一個數組去保存我們的相同的值,定義一個變量k控制這個數組的變化。
2.使用雙for循環(huán)一對多的比較是否相等,相當就保存到數組里面。但是有這樣的一個情況。
3.比較的過程中一個元素已經在之前放進這個數組里面了這個數值是不可以添加進來的。只有第一次進入不需要判斷是否和之前的相等。

int pp(int* ret,int n,int k)
{
    int flag=-1;
    int i=0;
    while(k--)
    {
        if(*(ret+i)==n)
        {
            flag=0;
            break;
        }
        else
        {
            flag=1;
        }
        i++;
    }
    return flag;
}

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
    int k = 0;
    int n1 = nums1Size;
    int n2 = nums2Size;
    int p1 = 0;
    int p2 = 0;
    int* ret = (int*)malloc((sizeof(int)) * (n1 + n2));

    for(int i=0;i<n1;i++)
    {
        for(int j=0;j<n2;j++)
        {
            if(nums1[i]==nums2[j])
            {
                if(k==0)
                {
                    *ret=nums2[j];
                    k++;
                    break;
                }
                else
                {
                    if(pp(ret,nums2[j],k))
                    {
                        *(ret+k)=nums2[j];
                        k++;
                        break;
                    }
                }
            }
        }
    }
    (*returnSize) = k;
    return ret;
}

總結:時間復雜度是O(n^2)文章來源地址http://www.zghlxwxcb.cn/news/detail-609377.html

到了這里,關于C語言每日一題:5.至少是其他數字的兩倍+兩個數組的交集。的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

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

相關文章

  • C 語言每日一題——旋轉數組的最小數字

    C 語言每日一題——旋轉數組的最小數字

    ?一、題目內容 ?提供一下該OJ題的鏈接:旋轉數組的最小數字_??皖}霸_??途W (nowcoder.com) 二、題目分析 通過示例1可知, 我們寫代碼的目的是在數組中找到一個最大值,并且返回來 ; 我們很容易的會想到創(chuàng)建一個變量:int min = 0; 然后遍歷整個數組,依次比較把一個最小值

    2024年01月19日
    瀏覽(16)
  • 每日一題之用兩個棧實現隊列

    題目:用兩個棧實現隊列 用兩個棧來實現一個隊列,使用 n 個元素來完成 n 次在隊列尾部插入整數( push )和 n 次在隊列頭部刪除整數( pop )的功能。隊列中的元素為 int 類型。保證操作合法,即保證pop操作時隊列內已有元素。 參考??偷慕忸}思路: 將 stack1 倒序寫入 stack2 ,然

    2024年02月13日
    瀏覽(20)
  • Leetcode每日一題——“合并兩個有序數組”

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

    各位CSDN的uu們你們好呀,又到小雅蘭的愉快題解時候啦,今天,我們的題目內容是合并兩個有序數組,下面,讓我們進入合并兩個有序數組的世界吧 示例 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日
    瀏覽(36)
  • Leetcode-每日一題【1669.合并兩個鏈表】

    Leetcode-每日一題【1669.合并兩個鏈表】

    給你兩個鏈表?list1 和?list2?,它們包含的元素分別為?n 個和?m 個。 請你將?list1?中下標從 a 到 b 的全部節(jié)點都刪除,并將list2?接在被刪除節(jié)點的位置。 下圖中藍色邊和節(jié)點展示了操作后的結果: ? 請你返回結果鏈表的頭指針。 示例 1: 輸入: list1 = [0,1,2,3,4,5], a = 3, b

    2024年02月13日
    瀏覽(23)
  • 力扣每日一題88:合并兩個有序數組

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

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

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

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

    2024年02月13日
    瀏覽(27)
  • 每日一題之兩個字符串的刪除操作

    題目鏈接 給定兩個單詞? word1 ?和? word2 ?,返回使得? word1 ?和?? word2 ?** 相同 所需的 最小步數 。 每步 ?可以刪除任意一個字符串中的一個字符。 示例 1: 示例 ?2: 提示: 1 = word1.length, word2.length = 500 word1 ?和? word2 ?只包含小寫英文字母 我們可以定義一個二維數組 dp ,

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

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

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

    2024年02月12日
    瀏覽(25)
  • 【每日一題】數組中兩個數的最大異或值

    【每日一題】數組中兩個數的最大異或值

    【哈希集合】【位運算-異或和】【數組】【2023-11-04】 421. 數組中兩個數的最大異或值 找出數組中兩個數的最大異或結果。 一看數據量達到了 1 0 5 10^5 1 0 5 ,那時間復雜度為 O ( n 2 ) O(n^2) O ( n 2 ) 的方法必定超時,因此需要去找 O ( n l o g n ) O(nlogn) O ( n l o g n ) 或者 O ( n ) O(n)

    2024年02月05日
    瀏覽(19)
  • 2023-05-17 LeetCode每日一題(判斷兩個事件是否存在沖突)

    點擊跳轉到題目位置 給你兩個字符串數組 event1 和 event2 ,表示發(fā)生在同一天的兩個閉區(qū)間時間段事件,其中: event1 = [startTime1, endTime1] 且 event2 = [startTime2, endTime2] 事件的時間為有效的 24 小時制且按 HH:MM 格式給出。 當兩個事件存在某個非空的交集時(即,某些時刻是兩個事

    2024年02月05日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包