leetcode: 2Sum/3Sum/3SumClosest/4Sum系列問題

leetcode(http://leetcode.com/onlinejudge)上有好幾道關於數組中幾個資料和為target的題目。恰好正在看劍指offer中“和為s的兩個數組這章”,據此思想,leetcode上的三道題目都被我解決了。總結一下。1.twoSum:輸入一個遞增數組和一個數字s,在數組中尋找兩個數使得它們的和正好是s。既然題目中已經提到了“遞增數組”,那麼肯定不會暴力了。因此肯定有<O(n*n)的辦法了。演算法:最初我們找到數組的第一個數字和最後一個數字。當兩個數位和大於輸

海量資料處理之bitmap實現

bitMap位元影像經常用來處理海量資料的問題,如3億號和7億QQ查重問題,電話號碼去重問題,都可以用位元影像法來處理。位元影像法思想較簡單,即申請一個由位元構成的table,可在相應的位置置0或1.從而快速達到快速尋找,同時又不會特別浪費空間。網上關於位元影像法的詳細解釋比較多。本文主要給出一個位元影像法簡單的實現。typedef char byte8;typedef byte8 * bitMap;int initBitMap(byte8 * & bitMap) {

屏蔽禁用語&KMP

在互連網上,由於一些政策法規,需要對一些文章或者聊天記錄進行關鍵字屏蔽,本文使用KMP模式比對演算法,將目標串S中的禁用語全部替換成*。實際應用中需要一個屏蔽詞庫,需將每個屏蔽詞條作為模式串T,分別過濾一次S串。考慮到屏蔽詞庫中有相同首碼的屏蔽詞,比如:“朱令”和“朱令案”,所以可以預先將屏蔽詞庫中的屏蔽詞按照長度做由大到小的排序。先過濾長詞,再過濾短詞即可。int getNext(char* s, int next[]) { next[0] = -1; int i = -1;

編程之美3.11 二分尋找常見問題

二分尋找原理簡單,但寫起來比較容易錯,只要記住一點:小心的處理邊界。就沒什麼問題了。下面是分別是三種常用的尋找要求的實現:(1)給定一個有序(非降序)數組arr,求任意一個i使得arr[i]等於value,不存在返回-1。(2)給定一個有序(非降序)數組arr,求第一個i使得arr[i]等於value,不存在返回-1。(3)給定一個有序(非降序)數組arr,求最後一個i使得arr[i]等於value,不存在返回-1。其他更複雜的要求只需將以上三種稍作改變即可。/* * find any i

遞迴,迭代還是其他?

1.問題描述:(1)一隻青蛙一次可以跳上1 級台階,也可以跳上2 級。求該青蛙跳上一個n 級的台階總共有多少種跳法。(2)一隻青蛙一次可以跳上1級台階,也可以跳上2 級……它也可以跳上n

我的程式又core dump了

小心翼翼的檢查好源檔案,make一下,慶幸編譯完美通過。run一下,過了不知道多久,程式又core了!你是否也遇到過這樣的情況,有點想罵人的衝動,程式總是無端的core dump,多個模組,gdb調試之也看不出問題,這樣的系統交付出去,自己都不放心。罵人是沒有用的,發泄發泄,該調試還得調試。冷靜下來,梳理一下思路,分析下到底哪裡出了問題。運行時的segment

求所有的出棧序列

 之前我們談到驗證一個出棧序列是否合法比較容易,簡單類比入棧出棧過程即可。那麼如果需要求出所有合法的出棧序列該怎麼辦呢?(1)我們之前談到,合法的出棧序列條件:對於每個已出棧數之後的且小於此數的數都必須按降序排列。例如1 2 5 3

經典冒泡排序,你寫對了嗎?

 冒泡排序可是排序入門層級的排序演算法了。演算法比較簡單,可是觀察周圍科班出身的學生或者應聘者,能將這一簡單排序演算法正確完整的寫出來的真的不多。據調查,出一道題給20個印度程式員寫代碼,結果基本一樣,而中國的程式員的結果卻五花八門。這點對大型軟體設計效率的提高非常不利。現在就給出經典冒泡排序的正確寫法,看看與你寫的有什麼不同?孰勝孰劣?void bubbleSort(int array[], int len){int exchange = len -

函數的調用方法

0.概述如果你能很清楚的理解下面這個程式,那麼本篇文章就不用看了。班門弄斧而已。void GetMemory(char* p){p = new char[100];}void main(){char *str = "1234";GetMemory(str);strcpy(str, "hi"); //出錯! str = NULL!printf("%s\n",

編程之美——小飛的電梯調度演算法之新解

亞洲微軟研究院所在的希格瑪大廈一共有6部電梯。在高峰時間,每層都有人上下,電梯每層都停。實習生小飛常常會被每層都停的電梯弄的很不耐煩,於是他提出了這樣一個辦法:由於樓層並不算太高,那麼在繁忙的上下班時間,每次電梯從一層往上走時,我們只允許電梯停在其中的某一層。所有乘客從一樓上電梯,到達某層後,電梯停下來,所有乘客再從這裡爬樓梯到自己的目的層。在一樓的時候,每個乘客選擇自己的目的層,電梯則計算出應停的樓層。問:電梯停在哪一層樓,能夠保證這次乘坐電梯的所有乘客爬樓梯的層數之和最少?解法一:暴力枚舉法

HDU 1059 Dividing (多重背包模板題,條件改變,比較靈活)

  連結:http://acm.hdu.edu.cn/showproblem.php?pid=1059  這道題剛一看,確實沒有想到是背包類型的題目,那麼我們怎麼分析它是一道多重背包問題呢?首先可以知道的是,我們要將這些硬幣分為價值等同的兩份那麼,我們可以用sum存下總價值,將總價值當做背包的容量這樣我們用一半的的容量背包去裝一半價值的彈珠當然,如果能裝的下,則剩下的一半背包當然能裝下另一半價值的彈珠這裡由於彈珠個數有限制、有價值、有容量所以我們使用多重背包。  AC代碼:套的是多重背包模板,這

cygwin的安裝若干問題

Cygwin是在windows下類比的unix環境。除了MinGW之外,Cygwin也可以當做C/C++的編譯器。但是在安裝Cygwin是有諸多問題,可能是由於Cygwin的開發人員比太熟悉windows介面互動特點吧,安裝引導異常怪異,可以從Internet上下載安裝也可以從本地安裝包安裝。但是這個軟體最怪癖的是最後一步,選擇好本地安裝包之後,往往不能把所有的封裝重新整理出來,後退一步再重選一下才能都刷出來。到了最後一步選安裝包的時候往往預設是樹狀結構的All-Default,我們一般人根本不

T9IME的實現

T9IME,名字聽起來陌生,可是大家卻經常使用它。可以說T9IME是IME曆史中的一次革命。至少自T9IME開始,IME有長足的進步。手機中九個數字鍵。26個英文字母被分配到2至9這8個數字鍵上。以前想輸入英文單詞的時候總是需要連續多次按某個鍵,才能得到目標字母。比如想輸入“hello”,就需要按兩次4,兩次3,三次5,三次5,三次6.輸入一個單詞需要數十次的按鍵,更何況還有經常按錯的情況。編輯一條簡訊非常麻煩。T9IME很好的解決了這一問題。使用者利用9個數字鍵輸入非常雜的英文單詞並且不用重複

連結常見錯誤

一.概要對於語言初學者,開始的時候總是把所有的代碼寫在一個源檔案中。當程式碼非常龐大時候,這樣的做法往往很難維護和修改。而真正的工程項目都是由多人共同完成的,因此劃分模組,組織良好清晰的檔案結構顯得非常重要。本文主要針對C/C++語言初學者在組織工程檔案結構時所遇到的眾多問題和概念給予總結。二.認識編譯單元開始時,自己寫的小工程只有一個源檔案時,通過編譯連結就可產生可執行檔。這個過程往往忽視了連結的存在。連結的主要工作就是將多個編譯單元各自產生的目標檔案彼此相串連,也即將在一個檔案中引用的符號同

函數指標的經典應用

本文並不是將什麼是指標函數,不過通過本文會令你對指標函數理解更深。對於C++裡面的排序函數qsort大家並不陌生。由於排序在電腦系統中的大量使用,各種程式設計語言都提供了相應的模板或泛型。因為排序只是一種順序上面的變化,並不會影響資料本身。所以不關乎什麼類型的資料排序,重要的是排序演算法本身。快速排序的平均效率較高。適合大部分的排序情況。在這裡,將通過講解qsort函數來學習指標函數的使用。函數原型:void qsort(void *base, int nelem, int width,

如何兩個棧實現隊列?兩個隊列實現棧?

初看此題目,你可能覺得自找苦吃,隊列就隊列為什麼要用棧來實現,工程中總是很典型的應用,直接調API就可以了,不管是什麼語言,已經有現成API封裝好隊列以及堆棧的所有操作。沒錯,在項目中很少有這樣的需要。但是我們是站在學習的角度,並不是畫地為牢,難為自己,而是對思維的一種鍛煉,對演算法的提升麼。我們在面試的時候碰到的這類問題還少嗎?所以大家就不要拍磚了。現在開始研究此問題。首先看如何用兩個棧去實現一個隊列,棧所具有的操作主要是push和pop。也就是面對一個桶,只能在頂上拿元素或放元素,別的地方都

使用案例圖中如何區分include和extend?

需求分析的時候,複雜的需求總是讓人很難搞清用例之前的關係,generalize關係比較容易搞清,最易混淆的就是include和extend了。網上好多都對此講解的不明白,甚至出錯。本文告訴你如何判斷到底是用include還是extend?看完就明白了。本圖是用visio畫的,所以《uses》其實是代表《include》(微軟總是不服從標準)。1. 《include》意為包含,也就是use,兩個用例之間的關係,執行一個用例就要使用並執行另一個用例。比如想要“預約”就要“驗證ID”。要“借書”就要“

總控節點防癱瘓

初學linux開發,總結下。若有錯誤,敬請指正,謝謝。1.主備模式配置兩個服務進程,一個主,另一個備,主和備都開啟服務。用戶端把主和備的地址都配上,如果發現往主服務進程發送請求,connect不到,推測主服務進程可能癱瘓,就往備用服務進程發送請求。對於這種方式,筆者尚未實踐過。只停留在理論階段。缺點需要手動修複主服務進程。2. fork + waitpidwhile (1) { pid_t pid; if((pid = fork()) < 0) {

DFS解素數環問題

問題描述: 將從1到n這n個整數圍成一個圓環,若其中任意2個相鄰的數字相加,結果均為素數,那麼這個環就成為素數環。 演算法描述:典型深搜問題。 代碼:#include<iostream>using namespace std;int N = 0;int data[30] = {0};bool not_contain(int num, int depth){for(int i = 0; i <= depth; i++){if(data[i] == num){return

POJ1363驗證出棧序列問題

題目地址: http://poj.org/problem?id=1363此題只需驗證是否為合法的出棧序列。有兩個思路:1、每個已出棧之後的數且小於此數的數都必須按降序排列。複雜度O(n^2),適合人腦。2、另一個思路就是直接類比入棧出棧過程。雖然類比毫無技巧可言,但複雜度O(n),優於演算法1。適合電腦。代碼如下:for(i = 0; i < N; i++){if(index < data[i]){while(index <

總頁數: 61357 1 .... 17118 17119 17120 17121 17122 .... 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.