程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 有兩數組A、B,長度分別為m、n。用不超過m+n的比較次數找到兩個數組中的相同元素,刪除數組中相同元素

有兩數組A、B,長度分別為m、n。用不超過m+n的比較次數找到兩個數組中的相同元素,刪除數組中相同元素

編輯:C#入門知識

有兩數組A、B,長度分別為m、n。用不超過m+n的比較次數找到兩個數組中的相同元素,刪除數組中相同元素


有兩數組A、B,長度分別為m、n。用不超過m+n的比較次數找到兩個數組中的相同元素


今天碰到一道筆試題:有兩數組A、B,長度分別為m、n。用不超過m+n的比較次數找到兩個數組中的相同元素。當時沒做出來,我現在給出C#版本,算是彌補一點遺憾。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SortAB
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] A = RandomIntArray(10); // m = 10
            int[] B = RandomIntArray(5);  // n = 5
            
            // 輸出兩個數組
            Console.Write("數組A:");
            foreach(int m in A)
                Console.Write("{0} ", m.ToString());

            Console.Write("\n數組B:");
            foreach (int n in B)
                Console.Write("{0} ", n.ToString());

            // 找出數組中相同的元素
            StringBuilder list = new StringBuilder();
            foreach (int m in A)
            {
                int getInt = find(m, B);
                if (getInt != -1)
                    list.Append(B[getInt]);
            }
            Console.WriteLine(); 
            Console.Write("兩個數組中重復的元素有:{0} ", list);

            // 用兩個數組的交集,來驗證
            IEnumerable<int> intersect = A.Intersect(B);
            Console.Write("\n兩個數組的交集:");
            foreach (int vars in intersect)
                Console.Write("{0} ", vars);

            Console.ReadLine();
        }
        // 二分查找。N 必須為有序數組,否則會出錯
        public static int find(int key, int[] N)
        {
            int lb = 0;
            int ub = N.Length - 1;
            int temp;
            while(true)
            {
                temp = (lb + ub)/2;
                if(N[temp] == key)    return temp;
                else if(lb > ub)      return -1;
                else
                {
                    if(N[temp] < key)    lb = temp+1;
                    else                   ub = temp-1;
                }
            }
        }

        public static int[] RandomIntArray(int count)
        {
            int[] array = new int[count];
            Random r = new Random(unchecked((int)DateTime.Now.Ticks)); 
            for (int i = 0; i < count; i++)
            {
                array[i] = r.Next(100);
            }
            return array;
        }
    }    
}

不過,我現在仍是疑惑:比較次數有可能會大於m+n。

 


已知ab兩個有序數組,a數組長度m,b數組長度n,最多循環m n次找出a,b數組中相同的元素

用歸並算法思想解決
i=j=0
while(i < = m && j < = n)
{
if(a[i] > b[j])
j++;
else if(a[i] < b[j])
i++;
else
pringf( "a[%d] = b[%d] ", i, j);
}

有兩個N(1≤N≤100)個元素的數組A與B,其中A來自輸入,將其"賦值"給B(即元素一一

分析近幾年的真題,經常檢查的復雜的算法,數據結構,棧,二叉樹遍歷的二分法筆試部分,讀者發現這部分的研究重點的概念。學習要點
細節:

答:概念的算法,算法的時間復雜度和空間復雜度的概念

兩個。數據結構定義,數據的邏輯結構和物理結構中定義

的3。堆棧定義和業務,存儲線性表

4。樹木和二進制的概念,二叉樹,完全二叉樹,二叉樹遍歷的基本性質的概念

5二進制搜索的

6。冒泡排序算法

1.1

的基本概念考點算法

考試會話的:

筆試網站,30%的概率評估,主要是為了填補空白的形式分數2分鐘,該存儲器測試中心的內容,讀者應該知道的算法在數據的基本操作。

計算機解決問題的過程實際上是運行算法,它被稱為計算機算法。

答:該算法的基本特征:可行性,不確定性,有限的,並有足夠的信息。

二。該算法的基本要素:

(1)和計算出的數據的算法

算法包括兩個基本要素:首先,計算和操縱數據對象;控制結構的算法。

在計算機系統中,基本的計算和經營以下四類:算術,邏輯運算符,關系運算符和數據傳輸。

(2)是一種算法,該算法的控制結構之間稱為算法的控制結構的行政命令操作。

描述的算法,這通常是一個傳統工藝的工具?圖中,NS結構圖,算法的描述語言。一般算法可以使用,以便選擇,三種基本控制結構循環組合。

測試中心兩個算法的復雜性

考試會話:

兩個筆試中心,定期檢查,在筆試中,有70%的機會,主要是選擇的形式為2分的得分內存測試中心重點內容,讀者應該還記得,時間復雜度和空間復雜度的概念。

算法

時間復雜度的算法的時間復雜度是實現算法所需的計算工作。 />在不同語言的相同的算法,或使用不同的編譯器來編譯或運行在不同的計算機上,不同的效率,這表示的絕對時間單位來測量的算法的效率是不合適的。這些因素的計算機硬件,軟件,運行一個特定的算法工作量大小,僅依賴於的大小(通常情況下)的整數n,這是一個函數的大小的問題。是,該算法工作

體積= F (N)

(2)算法

空間復雜度的算法的空間復雜度是算法需要的內存空間。

存儲空間算法,包括算法,輸入的初始數據和算法執行額外的存儲空間,空間占用的空間,在這期間的工作計劃實施單位,以及一些額外的空間數據結構算法需要額外的存儲空間,如果額外空間的問題數的相對大小是恆定的,則算法是工作場所的存儲空間,從而使許多實際問題中,以減少算法,壓縮和使用的存儲技術,以減少不必要的額外的空間。

故障排除:該算法是計算的工作量?

算法計算算法,該算法的基本操作基本操作的工作量的大小的問題是一個函數,該算法工程量= F(N),其中n是大小的問題。

1.2的基本概念數據結構

檢測中心三個數據結構定義

考試會話:

書面的三個考點,檢查的內容出現在筆試的機會,70%,主要基於兩-得分點,這是考試中心選定的形式存儲內容,讀者也應該知道,心中的邏輯結構和數據存儲結構的概念。

數據結構作為一個計算機研究和討論以下三個方面: />(1)數據收集的數據元素之間的內部邏輯,它是數據的邏輯結構; />(2)處理後的數據元素存儲在計算機中,數據存儲結構中的各個數據元素之間的關系;

(3)計算出各種數據結構。

數據:客觀事物在處理符號,可分為輸入計算機和計算機程序在計算機科學是所有符號的總稱。<BR /數據元素:數據的基本單位,通常作為一個整體考慮和處理的計算機程序。

數據對象,在本質上,它是一組數據單元的數據的一個子集是類似的。 />的邏輯結構是一個數據元素,它可以用來表示數量之間的關系,在這個集合中的數據元素之間的兩個元素的邏輯結構的邏輯描述,定義了一組:首先,收集通常由R.的數據元素時,通常是由D,D,它反映之前和之後的數據元素,數據結構之間的關系可以表示為=(四)

其中,B表示的數據結構反映在D中的每個數據元素,一般的元組。

在數據存儲結構中存儲的數據的邏輯結構的形式在計算機中的存儲空間之間的關系是已知的(也被稱為前,後物理數據結構)。/>的內存空間可能是在該計算機作為數據元素的位置關系的的邏輯不同,因此,以指示存儲在計算機的存儲器空間的數據元素之間的邏輯關系(即上下文)數據存儲結構,不僅要存儲在信息存儲信息之前需要的各種數據元素之間的關系的數據元素。

需要,多種常用的存儲結構,鏈接,索引,和其他存儲的順序結構的數據存儲結構的邏輯結構。不同的存儲結構中,數據處理的效率是不同的,因此,該數據處理中,選擇適當的存儲結構是很重要的。

考點4線性和非線性的結構 >考試時段:

書面的測試中心,定期檢查測試,但測試中心讀者了解筆試,主要的形式,30%的機會,得分的內存的內容填空檢測中心。

來回復雜性的關系的數據的各個元素之間的數據結構的,通用的數據結構被劃分成兩種類型:線性和非線性的結構,如果一個非空的數據結構,以滿足滿足以下兩個條件:/>(1),且只有一個根;

(2)在項目之前和之後的每個節點。

權利要求的數據結構的線性結構。線性結構也被稱為線性表的插入或刪除一個節點中任一項的線性結構,它應該是直鏈結構,如果一個數據結構,它是直鏈結構,被稱為非線性結構。

?故障處理:空的數據結構是線性或非線性結構?

一個空的數據結構,什麼是直鏈結構或直鏈結構的,根據具體的情況,以確定是否該數據結構的算法是線性結構的規則處理,是一種線性結構,非線性結構。

1.3棧和線性列表

測試中心棧的基本操作

考試鏈接:

書面測試中心,5,是一個強制性的內容中可能出現的筆試,100%,主要的形式,打進兩分,這個測試中心重點掌握的內容,讀者應選擇把握堆棧操作。

A.基本概念棧的棧限制只在一端的插入和刪除操作的線性形式的,通常被稱為中插入,刪除堆棧在堆棧的頂部的另一側的底端,當表中沒有元素稱為空棧。頂層元素總是插入後的元素,這是要刪除的第一個元素,元素在堆棧的底部總是第一個插入單元,這也是最後一個被刪除的元素。堆棧是“先進“或”後進先出“的原則組織數據。

兩個棧的存儲和運算順序

(第1節:米)的一維數組的順序存儲堆棧空間,其中m最大容量。

存儲空間S的堆疊順序(1米)的頂層元素,下一個元素在堆棧的底部(底部),(S)= 0表示堆棧為空= M堆棧是滿的。

三種類型的堆棧:堆棧的基本操作,退休堆棧和讀取的頂級元素。

壓棧操作:(一)棧棧操作的位置插入一個堆棧指針加一(前1),然後插入一個新元素在堆棧指針的位置時,堆棧指針指向存儲空間的最後一個位置,棧空間已滿,沒有新的元素。較長的堆棧操作,這種情況被稱為堆棧溢出“錯誤。

(2)退休堆棧操作:退休棧頂元素刪除,並分配到指定的變量。第一最上層元素(元素在頂部)的堆棧指針被分配給一個指定的變量,然後將堆棧指針減一(即頂部減1)。當頂的堆棧指針為0,表示堆棧是空的,並不能退還的堆棧操作。調用堆棧下溢錯誤條件。 />(3)讀取堆棧的頂部元素:最上面的元素是最上面的元素被分配給一個指定的變量。此操作不會刪除棧中元素的頂部,只分配給一個變量?體積,所以堆棧指針沒有改變。當頂的堆棧指針為0,表示堆棧是空的,讀出的最佳元素。

提示:棧是“先進”或“後進先出”的原則組織數據,但堆棧的方式有多種選擇,往往在考試,檢查各種堆棧模式。

考點6個基本概念,線性表

考試會話:

筆試地點在30%的機會,主要是根據所選擇的形式,成績為2分,此內存測試內容中心。集中的存儲節點上。 />鏈式存儲,需要每個節點由兩部分組成:一個存儲器,用於存儲數據元素的值的一部分,被稱為一個數據字段,而另一部分被用於存儲指針,稱為指針字段。使用指針指向一個節點或節點(即第一的片斷)。 />店鋪鏈用於表示線性結構,也可以用來表示的非線性結構。 />(1)的線性列表

鏈線性表存儲結構稱為線性列表。

在一些應用中,設置兩個指針,線性列表中的每個節點,稱為左指針的前一個節點,另一個右指針指向一個所謂的後續成員節點。此表被稱為一個雙向鏈表。

(2)與鏈棧

棧是一種線形的形式,也可以采用鏈式存儲結構。堆疊鏈可以被用來收集所有可用的內存被稱為用於在計算機中的存儲節點的鏈棧的堆棧。

故障排除:?鏈結構,空間關系和邏輯存儲的關系是什麼? />連鎖店的結構,數據存儲結構的存儲空間是不連續的,存儲的數據節點和數據元素之間的邏輯關系的順序可能是不一致的,以確定數據元素之間的邏輯關系,是一個指針域。

1.4

樹和二叉樹和二進制考點7,它的基本屬性

考試時段:

筆試考點是一個強制性的內容中可能出現的筆試100%主要是基於形式的選擇上,有時在灌裝,成績為2分,這個測試中心重點掌握的內容。專注於內存和二進制樹的性質。

誤區警示:

滿二叉樹是完全二叉樹,完全二叉樹是完全二叉樹。應該指出的是,在兩者之間的差異。

基本概念樹(樹)是一個簡單的非線性結構。在樹結構中,每個節點只有一個先決條件被稱為父節點,僅存在第一個節點,稱為樹的根。每個節點可以有多個,它們被稱為節點的子節點。經過一些所謂的葉節點。 />節點後的節點樹結構中的水平數。葉節點是0。在樹中,最高級別的樹中的所有節點是已知的。

2,二叉樹和它的基本屬性

(1)二叉樹的定義

二進制樹是一個有用的非線性結構,具有以下兩個特點:

( 1)非空二叉樹只有一個根;

②每個節點的兩個最大的子樹,稱為左子樹和右子樹節點。

可以看出,從上述特性以外,在一個二進制樹中,每個節點的度為2,這是所有的子樹(左子樹或右子樹)的二進制樹,在樹結構的每個節點的度可以是任意的。此外,二進制的子樹中的每個節點被分為左和右子樹的子樹。二叉樹,一個節點可以只左子樹和右子樹,右子樹沒有左子樹。當一個節點,節點沒有左子樹和右子樹的葉節點。

(2)二進制

二叉樹的基本屬性有以下屬性:

屬性1:在二進制系數層,高達2K-1(K≥1)節點; />兩個屬性:m,最高到2M-1二叉樹結點的深度;

性質:任何二進制度0節點(葉節點)總是一定程度的兩個以上的節點。

屬性4:N-頂點二叉樹,其深度至少為[log2n] + [log2n] log2n的整數部分。

?提示:在遍歷二叉樹的前序遍歷,遍歷或後葉節點遍歷二叉樹是不變的。

3,完全二叉樹,完全二叉樹

滿二叉樹,一個二叉樹有兩個子節點:除了最後一層,每一層中的所有節點。完整的二進制樹中,每一層的最大值,2K-1個節點在一個完整的二進制樹索引層,和一個完整的二進制樹的深度為2米,在該節點上的節點數目。 />完整的二進制樹是一個二叉樹:除了最後一層外,每一層的節點的數量最多;缺乏正確的節點中的最後一層。

完全二叉樹的葉子節點可能只出現在最高的兩個級別:任何節點,如果右分支節點p最高水平的後代,後代的左分支節點或最高級別的P或P +1。

以下兩個屬性完全二叉樹:

性質:n個結點的完全二叉樹的深度[log2n] +。

6性質:讓有n個節點的完全二叉樹。開始在根級別(從左至右為每一個自然數1,2),...,N為節點個數k(k = 1,2,......,n是數)節點具有以下結論:

①如果k = 1,則該節點為根節點,它沒有父節點,如果k> 1時,那麼父節點號是INT(K / 2)。

②如果2K≤N,K中的節點數目的左子2K;否則,該節點的左孩子(顯然是沒有正確的子節點)。

③如果數字2K +1≤N,K為2K +1右子節點數量,否則正確的子節點。

測試中心8二叉樹遍歷

考試時段:

在評估的概率為30%,得分兩點考點筆試,讀者應該熟悉各種遍歷算法可以推導出的結果的另一個橫動兩個遍歷的結果。

二叉樹的遍歷過程中,一般是遍歷左子樹,然後遍歷右子樹。提前在左,右後方的原則下,為了訪問根節點分為三類:前序遍歷二叉樹遍歷,後序遍歷。

(1)前序遍歷:訪問根目錄,然後遍歷左子樹,最後遍歷右子樹;和橫向左,右子樹還是第一次訪問的根目錄,然後遍歷左子樹,最後遍歷右子樹。

(2)前序遍歷左子樹,然後訪問根結點,最後遍歷右子樹,遍歷左,右子樹的遍歷左子樹,然後訪問根結點,最後遍歷右子樹。

(3)後序遍歷:遍歷左子樹,然後遍歷右子樹,最後訪問根遍歷左,右子樹仍然是首先遍歷左子樹,然後遍歷右子樹最後的訪問時間根節點。

故障排除:?樹和一個二叉樹之間的區別是什麼? />樹中,每個節點為2,即,所有的子樹(左或右子樹的子樹),二叉樹,在樹結構中的每個節點可以是任何電平。

1.5技術測試中心九順序搜索

考試會話:

在30%的概率通常選擇題的得分為2分,書面評估的測試場地,讀者應該把握順序搜索算法。

查找的方式找到指定的元素,在一個給定的數據結構。線性表的第一個元素的線性表元素開始等於查找成功尋找可比的元素,如果線性形式的所有元素與元素的發現相比,但不相等,則查找失敗。 />順序搜索只能用在下面的兩種情況:(1)如果它是無序列表的順序存儲結構,鏈式存儲結構/>線性形式,只用序貫搜索。只能用於/>(2)甚至排列的線性表結構,以便找到鏈。

測試中心10考試二分法查找鏈接:

10個考點筆試,30%的概率評估,一般出現在兩個點得分,評估,填寫數比較中找到差距,讀者應該是具體的主二進制搜索算法。

二分法只適用於順序存儲,排列非遞減順序列表中,如下:

設置長度為n的有序線性表,查找元素,

(1)我和線性表;

(2)我和中間產品的價值相等,找到成功;

(3)如果我是小於中間,在上半年同樣的方法在網上找到表; BR />(4)如果我是大於中間,以同樣的方式在互聯網上找到的表下半年。

?故障排除:這二進制搜索方法是否適合你?

二進制搜索方法適用的唯一的商店秩序。這個元素是一個非線性的形式值從大到小的順序排序?(即,從小型到大型,但允許相鄰元素值相等)列表。

這個過程一直持續到搜索長度是成功還是一個子表0。

有序的線性米長度為N,在最壞的情況下,二叉搜索只需要比較log2n次。

1.6測序技術

檢測中心對11至交換類排序

考試鏈接:

11個考點,是比較困難的內容,一般檢查30%的選擇機會評估約兩個分得的形式,讀者應該熟悉的幾個排序算法的基本過程。

泡沫交換類排序的排序和快速排序。

(1)冒泡排序

首先,從頭部掃描線的形式,連續的兩個相鄰的元素比較大小,如果前面的元素大於下列要素,那麼他們的下一步行動交換兩相鄰的元素,最終的最大線性形式。

然後,從後面的其余部分之前,掃描線性表,逐次比較兩個相鄰的元素,下列的大小是小於前一個元素,然後他們交換兩個相鄰元素的小前鋒,去年的頂部最低的線性形式。

重復這個過程,直到剩下的線性表是空的,然後其余的線性形式進行排序。

在最壞的情況下,冒泡排序需要比較的N(N-1)/ 2。

(2)快速排序

其基本思路是:采取任何作為基准(通常是第一要素),一趟排序序列中的元素進行排序,分為兩個子行元素序列,留下的代碼中的元素進行排序的排序碼序列是小於或等於基准元件,子序列正確的類代碼是大於排序代碼的基本元素,然後繼續進行排序的兩個子序列分別,直到整個序列,有序。

?故障排除:泡沫排序和快速排序,平均執行時間是多少呢?

冒泡法排序,平均執行時間是O(N2),快速排序是O(nlog2n)的平均執行時間。

1.7

一個詳細的例子,多選

算法的時間復雜度取決於______。 (考點2)

一)規模的問題)要處理的數據的初始狀態

三)困難的問題四))和B)

分辨率:不僅在相同的規模相關的問題的問題,但算法的時間復雜度與輸入數據的規模。所有可能的輸入數據的概率范圍,輸入的數據或數據集。

答案:D)

從邏輯數據結構,數據結構分為______。 (測試中心)

一個)的內部結構和外部結構)的線性結構和非線性結構

)一個緊湊的,非緊的結構4)動態和靜態結構

分析:邏輯結構反映的線性結構的數據元素之間的關系的一對數據元素,一個或非線性結構的數據元素之間的多對多的關系之間的邏輯關系,所以答案為B)。

答案:B)

,_______不能疊加的基本操作。

A)(測試中心),以確定堆棧元素空)堆棧設置一個空棧C)拆下頂部元素四)卸下底部的堆棧元素

分析:堆棧:堆棧,堆棧的基本操作,刪除的頂級元素,初始化,設置為空,以確定如果堆棧為空或全面投產提取的頂層元素堆棧頂部堆棧。

答案:D)

列表不具備的特點是_____。 (考點6)

)的任何點的節點B的隨機接入),但不移動的插入和移除的任何元素

三)沒有預先估計所需要的空間的長度成正比存儲空間D)

分析:順序表可以隨機存取?任何一個節點,在列表中的第一個數據節點,一個接一個,以找到每個節點。因此,答案是A)

答案:A)

後序遍歷序列是一個二叉樹的遍歷序列DEBAC稱為DACBE的,它的前序遍歷序列是_______。 (測試中心)

)ACBED)DEABC

C)DECABe)EDBAC“

分辨率:後序遍歷左子樹 - 右子樹 - 根遍歷的順序是左子樹 - 根 - 右子樹的前序遍歷的順序是“根 - 左子樹 - 右子樹。根據遍歷算法,這是不難遍歷序列是EDBAC的。因此,答案是D)。

答案:D)

根據每個元素的值(長度大於2),K值,分別與順序查找方法和二進制搜索找到的元素A和K是平等的,比較數字S和B線性表進行排序,在搜索不成功,S和B之間的_______。 (考點9)

)= BB)> BC)<BD)S≥乙

分析:順序搜索,搜索沒有成功對於一個給定的關鍵字比較N +1。相對不成功的查找搜索關鍵字數量的一半[log2n] +。當n≥2時,很顯然,N +1> [log2n] +1。

答案:B)

快速排序過程中,各部門將其分為左,右子表的表(子表),我們可以考慮兩個子表,得出以下結論,必須予以糾正,______。 (11考點)
)左,右的兩個子表,每個排序

B)離開子元素表是不大於右側的子表元素

C)的左子表的長度小於右子表的長度

D)左,右子表元素是等於平均

:快速排序的基本思想:排序表或作為參考的元素(通常是第一個元素),通過本行程排序的元素的行被分成兩個子表,排序?左邊的子碼是小於或等於排序代碼表元素的基本元素,子表的排序代碼的右側大於排序代碼的基本元素,然後繼續到兩個子表進行排序,直到整個表命令。

答案:B)

二,填寫

處理問題,正確和完整的描述稱為_______。 (測試中心)

分析:電腦問題解決的過程實際上是運行算法,它被稱為計算機算法。

答:算法

根據一個空的數據結構處理的線性結構,是______。 (測試中心)/>分析:一個空的數據結構是線性的或非線性的結構的結構,視情況而定。具有線性結構,線性結構,或者線性結構的數據結構的操作處理。 />甲:線性結構/>設樹T,節點2,3和4,分別為4,2,1,1,T的葉節點的數量的數量被稱為_______。 (考點7)

決議:一棵樹的性質不同:樹節點到相應的數字產品所有節點和節點度相等。

1×4 2×2 3×1 4×1 +1 = 16的樹中的節點。樹的葉節點的總數等於節點減去0,這是16 - (4 +2 +1 +1 +1)= 8。

答:8

二分法查找存儲結構是有限的_______和有序。 (測試中心)

分辨率:二進制搜索,也被稱為二進制搜索,它是一種高效的搜索方法。但兩個搜索條件:你必須訂購表的存儲結構和表元素必須基於關鍵字的順序(升序或降序)。
答:順序存儲結構

  1. 上一頁:
  2. 下一頁: