色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于數(shù)組的求和

電子工程師 ? 來源:FPGA之旅 ? 作者:FPGA之旅 ? 2022-08-10 11:25 ? 次閱讀

數(shù)組是最基本的數(shù)據(jù)結(jié)構(gòu),關(guān)于數(shù)組的面試題也屢見不鮮,本文羅列了一些常見的面試題,僅供參考,如果您有更好的題目或者想法,歡迎留言討論。目前有以下18道題目,如果有好的題目,隨時(shí)更新。

數(shù)組求和

求數(shù)組的最大值和最小值

求數(shù)組的最大值和次大值

求數(shù)組中出現(xiàn)次數(shù)超過一半的元素

求數(shù)組中元素的最短距離

找出絕對(duì)值最小的元素

數(shù)組求和

給定一個(gè)含有n個(gè)元素的整型數(shù)組a,求a中所有元素的和。可能您會(huì)覺得很簡(jiǎn)單,是的,的確簡(jiǎn)單,但是為什么還要說呢,原因有二,第一,這道題要求用遞歸法,只用一行代碼。第二,這是我人生中第一次面試時(shí)候遇到的題,意義特殊。

分析

簡(jiǎn)單說一下,兩種情況

1. 如果數(shù)組元素個(gè)數(shù)為0,那么和為0。

2. 如果數(shù)組元素個(gè)數(shù)為n,那么先求出前n - 1個(gè)元素之和,再加上a[n - 1]即可

代碼

// 數(shù)組求和int sum(int*a, int n){     return n == 0 ? 0 : sum(a, n -1) + a[n -1];}

求數(shù)組的最大值和最小值

給定一個(gè)含有n個(gè)元素的整型數(shù)組a,找出其中的最大值和最小值

分析

常規(guī)的做法是遍歷一次,分別求出最大值和最小值,但我這里要說的是分治法(Divide and couquer),將數(shù)組分成左右兩部分,先求出左半部份的最大值和最小值,再求出右半部份的最大值和最小值,然后綜合起來求總體的最大值及最小值。這是個(gè)遞歸過程,對(duì)于劃分后的左右兩部分,同樣重復(fù)這個(gè)過程,直到劃分區(qū)間內(nèi)只剩一個(gè)元素或者兩個(gè)元素。

代碼

// 求數(shù)組的最大值和最小值,返回值在maxValue和minValuevoid MaxandMin(int *a, int l, int r, int& maxValue, int& minValue){    if(l == r) // l與r之間只有一個(gè)元素    {        maxValue = a[l] ;        minValue = a[l] ;        return ;    }
    if(l + 1 == r) // l與r之間只有兩個(gè)元素    {        if(a[l] >= a[r])        {            maxValue = a[l] ;            minValue = a[r] ;        }        else        {            maxValue = a[r] ;            minValue = a[l] ;        }        return ;    }
    int m = (l + r) / 2 ; // 求中點(diǎn)
    int lmax ; // 左半部份最大值    int lmin ; // 左半部份最小值    MaxandMin(a, l, m, lmax, lmin) ; // 遞歸計(jì)算左半部份
    int rmax ; // 右半部份最大值    int rmin ; // 右半部份最小值    MaxandMin(a, m + 1, r, rmax, rmin) ; // 遞歸計(jì)算右半部份
    maxValue = max(lmax, rmax) ; // 總的最大值    minValue = min(lmin, rmin) ; // 總的最小值}

求數(shù)組的最大值和次大值

給定一個(gè)含有n個(gè)元素的整型數(shù)組,求其最大值和次大值

分析

思想和上一題類似,同樣是用分治法,先求出左邊的最大值leftmax和次大值leftsecond,再求出右邊的最大值rightmax和次大值rightsecond,然后合并,如何合并呢?分情況考慮

1 如果leftmax > rightmax,那么可以肯定leftmax是最大值,但次大值不一定是rightmax,但肯定不是rightsecond,只需將leftsecond與rightmax做一次比較即可。

2 如果rightmax > leftmax,那么可以肯定rightmax是最大值,但次大值不一定是leftmax,但肯定不是leftsecond,所以只需將leftmax與rightsecond做一次比較即可。

注意

這種方法無法處理最大元素有多個(gè)的情況,比如3,5,7,7將返回7,7而不是7,5。感謝網(wǎng)友從無到有靠誰(shuí)人指出。

代碼

// 找出數(shù)組的最大值和次大值,a是待查找的數(shù)組,left和right是查找區(qū)間,max和second存放結(jié)果void MaxandMin(int a[], int left, int right, int&max, int&second){    if(left == right)    {        max = a[left] ;        second =  INT_MIN;    }    elseif(left +1== right)    {        max = a[left] > a[right] ? a[left] : a[right] ;        second = a[left] < a[right] ? a[left] : a[right] ;    }    else    {        int mid = left + (right - left) /2 ;
        int leftmax ;        int leftsecond ;        MaxandMin(a, left, mid, leftmax, leftsecond) ;
        int rightmax ;        int rightsecond ;        MaxandMin(a, mid +1, right, rightmax, rightsecond) ;
        if (leftmax > rightmax)        {            max = leftmax ;            second = leftsecond > rightmax ? leftsecond : rightmax ;        }        else        {            max = rightmax ;            second = leftmax < rightsecond ? rightsecond : leftmax ;        }    }}

求數(shù)組中出現(xiàn)次數(shù)超過一半的元素

給定一個(gè)n個(gè)整型元素的數(shù)組a,其中有一個(gè)元素出現(xiàn)次數(shù)超過n / 2,求這個(gè)元素。據(jù)說是百度的一道題

分析

設(shè)置一個(gè)當(dāng)前值和當(dāng)前值的計(jì)數(shù)器,初始化當(dāng)前值為數(shù)組首元素,計(jì)數(shù)器值為1,然后從第二個(gè)元素開始遍歷整個(gè)數(shù)組,對(duì)于每個(gè)被遍歷到的值a[i]

1 如果a[i]==currentValue,則計(jì)數(shù)器值加1

2 如果a[i] != currentValue, 則計(jì)數(shù)器值減1,如果計(jì)數(shù)器值小于0,則更新當(dāng)前值為a[i],并將計(jì)數(shù)器值重置為1

代碼

// 找出數(shù)組中出現(xiàn)次數(shù)超過一半的元素int Find(int* a, int n){    int curValue = a[0] ;    int count = 1 ;
    for (int i = 1; i < n; ++i)    {        if (a[i] == curValue)            count++ ;        else        {            count-- ;            if (count < 0)            {                curValue = a[i] ;                count = 1 ;            }        }    }
    return curValue ;}

另一個(gè)方法是先對(duì)數(shù)組排序,然后取中間元素即可,因?yàn)槿绻硞€(gè)元素的個(gè)數(shù)超過一半,那么數(shù)組排序后該元素必定占據(jù)數(shù)組的中間位置。

求數(shù)組中元素的最短距離

給定一個(gè)含有n個(gè)元素的整型數(shù)組,找出數(shù)組中的兩個(gè)元素x和y使得abs(x - y)值最小

分析

先對(duì)數(shù)組排序,然后遍歷一次即可

代碼

int compare(const void* a, const void* b)
{
    return *(int*)a - *(int*)b ;
}

// 求數(shù)組中元素的最短距離void MinimumDistance(int* a, int n)
{
    // Sort    qsort(a, n, sizeof(int), compare) ;

    int i ; // Index of number 1    int j ; // Index of number 2
    int minDistance = numeric_limits::max() ;
    for (int k = 0; k < n - 1; ++k)
    {
        if (a[k + 1] - a[k] < minDistance)
        {
            minDistance = a[k + 1] - a[k] ;
            i = a[k] ;
            j = a[k + 1] ;
        }
    }

    cout << "Minimum distance is: " << minDistance << endl ;
    cout << "i = " << i << " j = " << j << endl ;
}

找出絕對(duì)值最小的元素

給定一個(gè)有序整數(shù)序列(非遞減序),可能包含負(fù)數(shù),找出其中絕對(duì)值最小的元素,比如給定序列 -5, -3, -1, 2, 8 則返回1。

分析

由于給定序列是有序的,而這又是搜索問題,所以首先想到二分搜索法,只不過這個(gè)二分法比普通的二分法稍微麻煩點(diǎn),可以分為下面幾種情況

如果給定的序列中所有的數(shù)都是正數(shù),那么數(shù)組的第一個(gè)元素即是結(jié)果。

如果給定的序列中所有的數(shù)都是負(fù)數(shù),那么數(shù)組的最后一個(gè)元素即是結(jié)果。

如果給定的序列中既有正數(shù)又有負(fù)數(shù),那么絕對(duì)值得最小值一定出現(xiàn)在正數(shù)和負(fù)數(shù)的連接處。

為什么?因?yàn)閷?duì)于負(fù)數(shù)序列來說,右側(cè)的數(shù)字比左側(cè)的數(shù)字絕對(duì)值小,如上面的-5, -3, -1, 而對(duì)于整整數(shù)來說,左邊的數(shù)字絕對(duì)值小,比如上面的2, 8,將這個(gè)思想用于二分搜索,可先判斷中間元素和兩側(cè)元素的符號(hào),然后根據(jù)符號(hào)決定搜索區(qū)間,逐步縮小搜索區(qū)間,直到只剩下兩個(gè)元素。

代碼

單獨(dú)設(shè)置一個(gè)函數(shù)用來判斷兩個(gè)整數(shù)的符號(hào)是否相同

bool SameSign(int a, int b){    if (a * b > 0)        return true;    else        return false;}

// 找出一個(gè)非遞減序整數(shù)序列中絕對(duì)值最小的數(shù)int MinimumAbsoluteValue(int* a, int n){    // Only one number in array    if (n ==1)    {        return a[0] ;    }
    // All numbers in array have the same sign    if (SameSign(a[0], a[n -1]))    {        return a[0] >=0? a[0] : a[n -1] ;    }
    // Binary search    int l =0 ;    int r = n -1 ;
    while(l < r)    {        if (l + 1 == r)        {            return abs(a[l]) < abs(a[r]) ? a[l] : a[r] ;        }
        int m = (l + r) /2 ;
        if (SameSign(a[m], a[r]))        {            r = m;            continue;        }        else        {            l = m ;            continue;        }    }}
審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4790

    瀏覽量

    68649
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    40137
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    417

    瀏覽量

    25956
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言中指針數(shù)組數(shù)組指針的區(qū)別

    指針和數(shù)組之間存在著緊密的關(guān)系。在本文中,我們將探討指針和數(shù)組的關(guān)系、指針?biāo)阈g(shù)和數(shù)組遍歷、多維數(shù)組與指針以及指針數(shù)組
    發(fā)表于 08-17 15:29 ?414次閱讀

    關(guān)于數(shù)組求和的問題

    數(shù)組求和為什么是0 呢
    發(fā)表于 09-23 10:03

    一個(gè)一維數(shù)組怎么實(shí)現(xiàn)相鄰元素相減后求和?

    小白求助大神,一個(gè)64元素的一維數(shù)組想要實(shí)現(xiàn)第二個(gè)元素減第一個(gè)元素,第三減第二,第四減第三……第64減第63,最后 第一個(gè)元素減第64個(gè)元素得到共64個(gè)差值,然后64個(gè)差值再求和,得到一個(gè)差值和。求大神幫忙寫個(gè)vi,萬(wàn)分感謝。
    發(fā)表于 06-29 10:00

    VB數(shù)組的使用

    實(shí)驗(yàn)六  數(shù)組的使用 一、實(shí)驗(yàn)?zāi)康?nbsp;   (1)掌握數(shù)組的聲明和數(shù)組元素的引用。    (2)掌握固定數(shù)組和動(dòng)
    發(fā)表于 09-23 19:28 ?5988次閱讀

    數(shù)組的知識(shí)

    互聯(lián)網(wǎng)JAVA其中一片內(nèi)容將關(guān)于數(shù)組的知識(shí),
    發(fā)表于 08-15 19:03 ?18次下載

    關(guān)于 Java 數(shù)組的 12 個(gè)最佳方法

    下文加介紹的是stackoverflow中關(guān)于數(shù)組方法的相關(guān)問題中,獲得最多票數(shù)的12個(gè)數(shù)組操作方法。
    發(fā)表于 01-29 09:45 ?905次閱讀

    Java創(chuàng)建數(shù)組的幾種方式及區(qū)別

    本文主要詳細(xì)介紹了關(guān)于Java創(chuàng)建數(shù)組的幾種方式。
    發(fā)表于 01-29 10:40 ?3832次閱讀

    指針數(shù)組數(shù)組指針的區(qū)別

    這里我們區(qū)分兩個(gè)重要的概念:指針數(shù)組數(shù)組指針。
    的頭像 發(fā)表于 06-29 15:30 ?2w次閱讀
    指針<b class='flag-5'>數(shù)組</b>和<b class='flag-5'>數(shù)組</b>指針的區(qū)別

    Keil使用結(jié)構(gòu)體數(shù)組的奇怪問題

    今天用keil的時(shí)候發(fā)現(xiàn)一個(gè)很奇怪的點(diǎn),是關(guān)于結(jié)構(gòu)體數(shù)組的。首先說明我的keil版本是:V5.28.0.0問題是這樣的:我在a.h文件定義了一個(gè)結(jié)構(gòu)體,然后在a.c中初始化了一個(gè)結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體
    發(fā)表于 11-21 16:36 ?3次下載
    Keil使用結(jié)構(gòu)體<b class='flag-5'>數(shù)組</b>的奇怪問題

    二維數(shù)組數(shù)組指針以及指針數(shù)組

    二維數(shù)組數(shù)組指針以及指針數(shù)組
    的頭像 發(fā)表于 08-16 09:02 ?2677次閱讀

    關(guān)于數(shù)組常見的面試題

    數(shù)組是最基本的數(shù)據(jù)結(jié)構(gòu),關(guān)于數(shù)組的面試題也屢見不鮮,本文羅列了一些常見的面試題,僅供參考。目前有以下18道題目。
    的頭像 發(fā)表于 08-17 09:25 ?1656次閱讀

    變長(zhǎng)數(shù)組和動(dòng)態(tài)數(shù)組區(qū)別

    動(dòng)態(tài)數(shù)組是指在聲明時(shí),沒有確定數(shù)組大小的數(shù)組,它可以隨程序需要而重新指定大小。動(dòng)態(tài)數(shù)組的內(nèi)存空間是從堆動(dòng)態(tài)分配的,當(dāng)程序執(zhí)行到我們編寫的分配語(yǔ)句時(shí),才為其分配存儲(chǔ)空間。
    的頭像 發(fā)表于 09-28 15:20 ?1914次閱讀

    unpacked數(shù)組和packed數(shù)組的主要區(qū)別

    unpacked數(shù)組和packed數(shù)組的主要區(qū)別是unpacked數(shù)組在物理存儲(chǔ)時(shí)不能保證連續(xù),而packed數(shù)組則能保證在物理上連續(xù)存儲(chǔ)。
    的頭像 發(fā)表于 10-18 09:13 ?2846次閱讀

    C 語(yǔ)言數(shù)組的基本結(jié)構(gòu)

    數(shù)組是最基本的數(shù)據(jù)結(jié)構(gòu),關(guān)于數(shù)組的面試題也屢見不鮮,本文羅列了一些常見的面試題,僅供參考。目前有以下18道題目。 數(shù)組求和
    的頭像 發(fā)表于 06-22 10:56 ?606次閱讀

    數(shù)組的定義 什么是數(shù)組

    數(shù)組 數(shù)組是內(nèi)置類型,是一組同類型數(shù)據(jù)的集合,它是值類型,通過從0開始的下標(biāo)索引訪問元素值。 在初始化后長(zhǎng)度是固定的,無法修改其長(zhǎng)度。當(dāng)作為方法的參數(shù)傳入時(shí)將復(fù)制一份數(shù)組而不是引用同一指針。
    的頭像 發(fā)表于 10-09 09:39 ?1913次閱讀
    主站蜘蛛池模板: 亚洲日本欧美产综合在线| 最近中文字幕2018MV高清在线| 人妻体体内射精一区二区| 成年色黄APP下载| 超大号黑吊magnet| 国产对白精品刺激一区二区| 国产99在线视频| 国产亚洲精品久久精品69| 果冻传媒在线完整免费播放| 精品夜夜澡人妻无码AV| 久久天天躁狠狠躁夜夜呲| 蜜柚视频网在线观看免费| 全身无赤裸裸美女网站| 天天影视网网色色欲| 亚洲女人网| 97干97吻| 国产成人精选免费视频| 国产亚洲精品久久无亚洲| 久久偷拍vs国产在线播放| 强奷表妺好紧2| 亚洲AV综合色一区二区三区| 中文字幕人成人乱码亚洲影视| YY8848高清私人影院| 国产在线精品视亚洲不卡| 老湿机一区午夜精品免费福利| 日本 一二三 不卡 免费| 亚洲国产成人综合| 91嫩草国产在线观看免费| 国产AV精品白浆一区二| 久久99亚洲热最新地址获取| 欧美精品中文字幕亚洲专区| 午夜想想爱| 2020美女视频黄频大全视频| 古风H啪肉NP文| 久久婷婷国产五月综合色啪最新| 青青视频国产色偷偷| 亚洲精品第一页| no视频在线观看| 极品少妇粉嫩小泬啪啪AV| 人人碰国产免费线观看| 亚洲一区综合图区|