演算法設計:如何求數組中第2大的數

一種思路是利用兩次冒泡法,因為第一次冒泡,最大的在a[n-1],第二次冒泡後,次最大值在a[n-2]這樣直接返回即可。核心代碼如下:for(int i=0; i<2; i++)for(int j=0; j<n-i-1; j++){if(a[j] >a[j+1])swap(a[j], a[j+1]);}return a[n-2];但是這樣做,顯然效率不夠高,幾乎要遍曆兩次,有沒有遍曆一次就可以找到呢?第二種思路:首先看源碼:int find2Max(int a[], int n)

演算法設計:如何求數組中第i大 或 第i小的數 (續上)

http://blog.csdn.net/yanzi1225627/article/details/8111806 、http://www.eyeandroid.com/thread-9629-1-1.html這裡討論了求第二大的思路。現在研究如果是第i大怎麼辦? 先清晰一下概念,如果有個數組a[6] = 2 60 10 32 84 6; 那麼第1大的數是最大值84, 第2大是60, 第3大是32, 第1小是2, 第二小是6., 第三小是10, 第4小是32. 也即如果讓找第i小,

Fedora14 使用虛擬機器橋接上網 靜態配置固定IP 和宿主機IP在同一網段的方法 及 若干問題解決(NFS掛載第一步)

要進行NFS掛載,第一步是使虛擬機器橋接上網,橋接上網下面的小框 不用勾選。下面要將其IP地址和宿主機IP配置在同一網段,破費周折終於成功。記錄下步驟:一,我最初是參照http://hi.baidu.com/%D1%E3%C9%F9%C1%F4/blog/item/b0045efd9c02773608244d01.html這裡,進行了以下三個步驟:1),# ifconfig eth0 up   (註解:系統裝好後預設的網卡是eth0,此命令將這塊網卡啟用。)2),# chkconfig

FIFO接收資料

老規矩,先說下問題:串口在接收pc端發來的資料時(100個bytes,每200ms發送一次),偶爾會丟一些資料。某一次的測試記錄如下:第一次丟資料 發送總量60多萬位元組 丟了27個第二次丟資料 發送總量80多萬位元組 (在上一次發送的基礎上又)丟了40個第三次丟資料 發送總量190多萬位元組 (在上一次發送的基礎上又)丟了37個       以上資料要說明的是所丟的資料是一個隨機情況,因為如果我把環境清空(例如斷電重啟)而pc端的發送條件不變,那麼丟資料的情況就不是上面顯示的記錄了。     

移植qt4.8.1到mini2440

http://hi.baidu.com/wxpool/item/9dd17846613991ab60d7b9c7交叉編譯器:arm-linux-gcc 4.4.3(友善之臂提供)平台:Ubuntu 10.04硬體:mini2440,256M Flash,T35 LCDTslib:Tslib-1.4==============================================================================1.slib為觸控螢幕驅動獲得的採樣提供諸如濾

找工作時 謹記三個圈

今天去匯川面試,面試官的一席話讓我受益匪淺。找工作時,一定要看三個圈:第一個圈,自己的能力、強項。第二個圈,自己的意願第三個圈,外部環境,公司所能提供的崗位!如果這三個圈有交集,這份工作無疑是一份滿意的工作!如果沒有交集,那就看自己的意願,是否願意放棄自己的強項,轉學其他領域。      

關於宏#define使用陷阱總結

宏定義發生在先行編譯階段,簡單的說本質就是文本替換。使用時,有以下注意事項:1,用宏定義運算式時,要使用完備的括弧如一下三個例子:#define ADD(a,b) a+b#define ADD(a, b) (a + b)#define ADD(a, b)  (a) +(b)這三種定義,全部都是不符合要求的。陷阱如下:在計算ADD(a,b)*ADD(c,d)時,顯然第一種出問題了。#define MULTIPLE(a, b)  (a*b) 

sizeof()函數

sizeof()函數只計算棧中分配的大小。 /************************************************************************//* sizeof 只求棧中的大小,存放在資料區的不包括在內,如下的static int b *//************************************************************************/#include<iostream>using

Qt+OpenCV移植到arm上採集網路攝影機視頻 請注意

     一般都是在PC上跑的通,但在arm就不行。到arm上直接段錯誤。參見我以前的文章http://www.oschina.net/question/256295_51872。原因就是出在CvCapture* pCapture = cvCreateCameraCapture(-1);這句話上,一執行到這裡就會報Segmentation

演算法設計:二維數組,橫向縱向均遞增,如何尋找n是否在數組裡??

      這個題在筆試中經常會考到,這裡做個總結。思路就是,從矩陣的最右上方的元素開始掃描a[i][j],如果要尋找的數n小於該元素,則讓i--,即往左移動一個資料再比較。如果n大於該數,則讓j++,讓原來的數往下移動一個數接著比較。 這裡的設計思路就是充分利用了,數組橫向縱向都遞增的規律。而且巧妙的,一次只改變行數或列數,對應的列數或行數保持不變來進行搜尋。 這和二維數組的螺旋列印異曲同工,待雜家有時間再總結螺旋列印問題。時間複雜度最差為m+n,最好為m或者n。程式如下:#include

演算法設計:有n個數,範圍是從1到n,且只有唯一的兩個數相同,如何最快的求相同的這個數值?

為了方便問題描述,假設n = 10,即數組a[10]裡有10個數,範圍是從1到10,且裡面只有兩個數的值是相同的。如何求這個相同的數值。常規思路:1,先冒泡排序,然後用while迴圈找出這個相同的數值2,直接用冒泡的思路,i從0到n-2,j = i+1,依次比,找出相同的數值。上述複雜度都太高,而且沒有充分利用到這裡面的特殊條件:有且只有兩個值是相同的。事實上,可以對這個數組a[10]求和 = sum1,然後對從1到10進行求和 = sum2,然後求abs(sum1 -

S3C2440之UART操作(FIFO中斷模式)

關於串口的知識 3個獨立的串口,每一個都可以利用DMA和中斷方式操作。每個包含2個64位元組FIFO,一個接,一個發。 非FIFO模式相當於FIFO模式的一個寄存器緩衝模式。 每一個UART有7種狀態,overrun錯誤,校正錯誤,幀錯誤,斷點,接收緩衝區準備好,發送緩衝區為空白,發送移位寄存器為空白。 當接收移位寄存器中的資料傳給FIFO的時候,且接收的資料觸發了Rx FIFO的閥值,Rx中斷產生了。 發送器中FIFO的還未發得資料到達Tx

演算法設計:從一個很大很大的數組裡找前N個最大數的思路之一

      這裡先講一種類似於快速排序的方法。注意題目要求,不要求完全排序,只要求最快解決問題!這個題是我面試NI公司時,對方問我的。原話是從1億個資料裡,找出前一百個最大的。首先看源碼吧:void main(int a[], int start, int end, int N)//從數組a裡,找出前N個最大的。如果是a[100],則start = 0, end = 99.注意這個索 引問題{    int mid = (start + end)/2;   int i = start, j =

字元裝置 register_chrdev_region()、alloc_chrdev_region()區別

轉載http://blog.sina.com.cn/s/blog_620b71230100f71g.html字元裝置 register_chrdev_region()、alloc_chrdev_region 核心中所有已指派的字元裝置編號都記錄在一個名為 chrdevs 散列表裡。該散列表中的每一個元素是一個 char_device_struct 結構,它的定義如下:static struct char_device_struct {struct char_device_struct

QT控制mplayer

http://blog.csdn.net/songjinshi/article/details/65213191.MPlayer 的特殊控制模式    MPlayer 本身是一個命令列的程式,但是他提供了有後台模式(Slave),可以把自己輸出重新導向到一個指定的X Windows視窗中,並且可以通過管道向其發送命令來控制,這樣就為GUI程式提供一個簡單的編程介面.讓其用圖形介面來控制.Gnome下的 gmplayer其實就是通過這個方法來在圖形介面調用MPlayer.   

狀態機器的應用

要求輸入一段字串,統計字串中單詞的個數!#include<stdio.h>#include<string.h>int IsChar(char ch){ if((ch>='a')&&(ch<='z')||(ch>='A')&&(ch<='Z')) { return 1; } else { return 0; }}int main(int argc,char *argv[]){char buf[256]={0};

【人生】程式員裝逼指南—-速成篇 .

一.準備工作“工欲善其事必先利其器。”1.電腦不一定要配置高,但是雙屏是必須的,越大越好,能一個橫屏一個豎屏更好。一個用來查資料,一個用來寫代碼。總之要顯得資訊量很大,效率很高。2.椅子不一定要舒服,但是一定要可以半躺著。3.大量的便簽,各種的顏色的,用來記錄每天要完成的事務,多多益善。沿著電腦螢幕的邊框,盡量貼滿,顯出有很多事情的樣子。4.工具書,orelly的,機械工業,電子工業什麼的都可以,能英文就英文,不行影印版的也可以,反正越厚越好,而且千萬不要放在書架上,一定要堆在桌上,半開啟狀。二

使用fread 注意事項

    看看下面一段代碼: char *newbuf;  long int  flen,read_size;       FILE *pFile=fopen("./get_time.cpp","r");   fseek(pFile, 0, SEEK_END);  flen=ftell(pFile);  printf("flen=%d/n",flen);  newbuf=(char

學習Qt的資源-網站、論壇、部落格等

來自《零基礎學Qt 4編程》一書的附錄附錄C Qt資源C.1 Qt 官方資源全球各大公司以及獨立程式開發人員每天都在加入 Qt 的開發社區。他們已經認識到了Qt 的架構本身便可加快應用程式開發進度。這些開發人員,無論是想開發單平台軟體、還是想開發跨平台軟體,都可從 Qt 統一而直接的 API、強大的構建系統以及各種支援工具(例如 Qt Designer)中受益無窮。Qt具有一個極具活力並十分有益的使用者社區,使用者可以通過以下方式進行溝通:qt-interest 郵件清單、Qt Centre

cdev_alloc和cdev_init

核心中每個字元裝置都對應一個 cdev結構的變數,下面是它的定義:linux-2.6.22/include/linux/cdev.hstruct cdev {struct kobject kobj;          // 每個 cdev都是一個 kobjectstruct module *owner;       //指向實現驅動的模組const struct file_operations *ops;   // 操縱這個字元裝置檔案的方法struct list_head list;    

總頁數: 61357 1 .... 16611 16612 16613 16614 16615 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.