1.把二元尋找樹轉變成排序的雙向鏈表題目:輸入一棵二元尋找樹,將該二元尋找樹轉換成一個排序的雙向鏈表。要求不能建立任何新的結點,只調整指標的指向。 10 / \ 6 14 / \ / \4 8 12 16 轉換成雙向鏈表4=6=8=10=12=14=16。首先我們定義的二元尋找樹 節點的資料結構如下:struct BSTreeNode{ int m_nValue; // value of node
一,題目:輸入一個已經按升序排序過的數組和一個數字,在數組中尋找兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是O(n)。如果有多對數位和等於輸入的數字,輸出任意一對即可。例如輸入數組1、2、4、7、11、15和數字15。由於4+11=15,因此輸出4和11。二,題目痛點在於時間複雜度控制在O(n)三,方法一 1,分別從數組前,數組後向中間尋找。直到前後相遇!!
他年度營收100多萬開著一輛寶馬5,天天被應酬折騰的要死要活,真想狠狠心不幹了,當初幹嘛非要自己創業,當年在那家外企也能掙個四五十萬,加上些油水,能弄個大幾十萬,比自己幹不知道要輕快多少!五險一金有公司給上著,多好啊,再看看現在,看看老婆孩子,還有跟著自己吃飯的好幾十人,哪能說放手就放手,硬著頭皮接著幹吧,這不,一個猿類又給他打電話了,不知道又要幹啥,唉。。。。。。。。。。。 他年度營收50多萬開
一,題目:最大子段和: 給定一個長度為n的一維數組a,請找出此數組的一個子數組,使得此子數組的和sum=a[i]+a[i+1]+……+a[j]最大,其中i>=0,i<n,j>=i,j<n 例如:31 -41 59 26 -53 58 97 -93 -23 84 子矩陣59+26-53+58+97=187為所求的最大子數組。二,源碼第一種:直接窮舉法: #include <iostream>using
一,最大子矩陣問題: 給定一個n*n(0<n<=100)的矩陣,請找到此矩陣的一個子矩陣,並且此子矩陣的各個元素的和最大,輸出這個最大的值。Example: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 其中左上方的子矩陣: 9 2 -4 1 -1 8 此子矩陣的值為9+2+(-4)+1+(-1)+8=15。 二,分析
一 ,問題描述: 有N件物品和一個容量為V的背包。第i件物品的費用是c[i],價值是w[i]。求解將哪些物品裝入背包可使價值總和最大。所謂01背包,表示每一個物品只有一個,要麼裝入,要麼不裝入。二,解決方案: 考慮使用dp問題 求解,定義一個遞迴式 opt[i][v] 表示前i個物品,在背包容量大小為v的情況下,最大的裝載量。opt[i][v] = max(opt[i-1][v] , opt[i-1][v-c[i]] + w[i]) 解釋如下:opt[i-1][v]
一,題目:求一個矩陣中最大的二維矩陣(元素和最大).如:1 2 0 3 42 3 4 5 11 1 5 3 0中最大的是:4 55 3要求:(1)寫出演算法;(2)分析時間複雜度;(3)用C寫出關鍵代碼二,分析: 假設最大子矩陣的結果為從第r行到k行、從第i列到j列的子矩陣,如下所示(ari表示a[r][i],假設數組下標從1開始): | a11 …… a1i ……a1j ……a1n | | a21 …… a2i ……a2j ……a2n | ..... | ar1 …… ari
一,問題描述 在8X8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。 二,分析 採用逐步試探的方式,先從一個方嚮往前走,能進則進,不能進則退並嘗試另外的路徑。首先我們來分析一下國際象棋的規則,這些規則能夠限制我們的前進,也就是我們前進途中的障礙物。一個皇后q(x,y)能被滿足以下條件的皇后q(row,col)吃掉 1)x=row(縱向不能有兩個皇后) 2)
一,題目:有兩個序列a,b,大小都為n,序列元素的值任意整數,無序;要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。 例如: var a=[100 ,99 ,98 ,1 ,2 ,3]; var b=[1, 2, 3, 4, 5, 40]; 有兩個序列a,b,大小都為n,序列元素的值任意整數,無序; 要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。
一,題目:(Google筆試) n支隊伍比賽,分別編號為0,1,2……n-1,已知它們之間的實力對比關係,儲存在一個二維數組w[n][n]中,w[i][j] 的值代表編號為i,j的隊伍中更強的一支。所以w[i][j]=i 或者j,現在給出它們的出場順序,並儲存在數組order[n]中,比如order[n] = {4,3,5,8,1......},那麼第一輪比賽就是 4對3,
一,貪心演算法的設計思想 • 從問題的某一個初始解出發逐步逼近給定的目標,每一步都作一個不可回溯的決策,儘可能地求得最好的解。當達到某演算法中的某一步不需要再繼續前進時,演算法停止。二,貪心演算法的基本性質 1)貪心選擇性質 所謂貪心選擇性質是指所求問題的整體最優解可以通過一系列局部最優的選擇,即貪心選擇來達到。這是貪心演算法可行的第一個基本要素,也是貪進法與動態規劃法的主要區別。 2) 最優子結構性質
先吐槽幾句:總是有人說,門門通不如一門精。也不知道,這話到底是不是真的如其所言,感覺自己就像武俠裡習武的少年,總想把世界上所有的武學全部學會,到最後卻走火入魔。 從大一接觸電腦起,已經五個年頭了,學的知識方方面面,可回想自己精通的知識,C++?算了吧,雖然讀了N遍教材,認真研習了經典教材《C++ primer》但是,每每還是有弄不明白的地方。Java?拉倒吧,這麼多的類庫、函數。C#?
一,演算法策略應用 1)關於背包問題 按與利潤關係劃分 •與利潤無關的背包問題 •與利潤有關的背包問題 按物體裝入背包的多少 •部分背包問題 •0-1背包問題 2)背包問題的求解策略,根據不同的需求 •貪進法、回溯法、分支限界法、動態規劃
序言:大家是不是莫名其妙,我怎麼什麼都攙和上兩腳。搞起這個高深的COM編程來了。呵呵……這是幫同學做的一個小東西,由於以前拿這個比賽過,今天由於業務需要又用上了,所以又拉我來做一下這個。都是兄弟,放下手中的活幫哥們做了。 需求:在IE菜單中,添加右鍵。點擊右鍵調用javaScript,執行相應功能。 步驟:以管理員身份開啟VS2005,建立ATL工程,動態擷取當前位置,並寫入註冊表中void OnChange(){ WCHAR buf[12
一,語言處理器 1)一個整合的軟體開發環境,其中包括很多種類的語言處理器,比如編譯器、解譯器、彙編器、連接器、載入器、調試器以及程式概要提取工具。 2)編譯器:把來源程式的每一條語句都編譯成機器語言,並儲存成二進位檔案,這樣運行時電腦可以直接以機器語言來運行此程式,速度很快;
一,題目: 生產者消費者線程示範 一個生產者線程將int類型的數入列,一個消費者線程將int類型的數出列 二,分析: 這一個,為作業系統上的一個經典例子,以下是july給出的解答 三,源碼:#include <windows.h>#include <stdio.h>#include <process.h>#include <iostream>#include &
一,詞法分析器的作用 詞法分析是編譯的第一階段。詞法分析器主要任務是讀入來源程式的輸入字元、將他們組成詞素,產生並輸出一個詞法單元序列,每個詞法單元對應於一個詞素。 分析部分:詞法分析、文法分析(簡化編譯器設計、提高編譯器效率、增強編譯器可移植性) 1)詞法單元:詞法單元名和可選的屬性值組成。關鍵字、操作符…… 2)模式:詞法單元詞素可能具有的形式,當詞法單元是關鍵字時,模式就是這個關鍵字的字元序列
一,概述 演算法策略和演算法是有區別的,它們是演算法設計中的兩個方面,演算法策略是面向問題的,演算法是面向實現的; 但二者又是不可分的,首先是通過演算法策略才找出解決問題的演算法,其次對於用不同演算法求解的問題演算法策略是自然不同的。二,演算法策略 1)遞推策略:“遞推法”和貪心演算法一樣也是由當前問題的逐步解決從而得到整個問題的解,只是依賴的是資訊間本身的遞推關係,每一步不需要策略參與到演算法中,它們更多地用於計算。
一,迭代與遞推 1)迭代法也稱“輾轉法”,是一種不斷用變數的舊值遞推出新值的解決問題的方法。迭代演算法一般用於數值計算。迭代法應該是我們早已熟悉的演算法策略,程式設計語言課程中所學的累加、累乘都是迭代演算法策略的基礎應用。例如:斐波那契數列 例子:兔子繁殖問題 一對兔子從出生後第三個月開始,每月生一對小兔子。小兔子到第三個月又開始生下一代小兔子。假若兔子只生不死,一月份抱來一對剛出生的小兔子,問一年中每個月各有多少只兔子。
• 問題描述: 殘缺棋盤是一個有2k×2k(k≥1)個方格的棋盤,其中恰有一個方格殘缺。給出k=1時各種可能的殘缺棋盤,其中殘缺的方格用陰影表示。• 殘缺棋盤問題就是要用這四種三格板覆蓋更大的殘缺棋盤。在此覆蓋中要求: 1)兩個三格板不能重疊 2)三格板不能覆蓋殘缺方格,但必須覆蓋其他所有的方格。 小格子數(2k×2k -1)三格板中小格子數3。所以所需要的三格板總數為(2k×2k -1 )/3。• 例如,一個4*4的殘缺棋盤2k*