1. 程式人生 > >演算法與資料結構——搜狗筆試題

演算法與資料結構——搜狗筆試題

演算法題 64:火眼金睛(搜狗筆試題)

現在我們需要查出一些作弊的問答社群中的ID,作弊有兩種:1.A回答了B的問題,同時B回答了A的問題。那麼A和B都是作弊。2.作弊ID使用者A和作弊ID使用者B同時回答了C的問題,那麼C也是作弊。已知每個使用者的ID是一串數字,一個問題可能有多個人回答。

輸入描述:
每組資料第一行為總問題數N(N小於等於200000),第二行開始每行一個問題,第一個數字為提問人ID,第二個數字為回答人數,後面則為所有回答人的ID。(ID均為0-1000000的整數)

輸出描述:
第一行為作弊ID數量,第二行開始為從小到大的每行一個作弊ID。

輸入例子:
3
1 1 2
2 1 1
3 2 1 2

輸出例子:
3
1 2 3

*****************************************************************************************************************************

演算法題 78:矩陣元素相乘(搜狗筆試題)

題目:A[n,m]是一個n行m列的矩陣,a[i,j]表示A的第i行j列的元素,定義x[i,j]為A的第i行和第j列除了a[i,j]之外所有元素(共n+m-2個)的乘積,即x[i,j]=a[i,1]a[i,2]a[i,j-1]…*a[i,m]*a[1,j]*a[2,j]…*a[i-1,j]*a[i+1,j]…*a[n,j],

現輸入非負整形的矩陣A[n,m],求MAX(x[i,j]),即所有的x[i,j]中的最大值。

輸入描述:
第一行兩個整數n和m。之後n行輸入矩陣,均為非負整數。

輸出描述:
一行輸出答案。

輸入例子:
3 5
5 1 8 5 2
1 3 10 3 3
7 8 5 5 16

輸出例子:
358400

請描述一下你的解題思路。

*****************************************************************************************************************************

演算法題 105:滿二叉樹最大深度(搜狗筆試題)

題目:使用一個長度最大為150的佇列,對滿二叉樹進行廣度優先遍歷時,能夠容納的二叉樹的最大深度為()(第一層深度為1)
A、7
B、8
C、9
D、10

*****************************************************************************************************************************

演算法題 146:棧、排序演算法、二叉樹等6選擇題(搜狗2017校招C++工程師筆試題)

1、表示式3*2^(4+2*2-6*3)-5,求值過程中當掃描到6時,物件棧和算符棧為(),其中^為乘冪。
A、3,2,8;*^-
B、 3,2,4,2,2;^+-
C、 3,2,4,2,2,;^(+-
D、 3,2,8;*^(-

2、現有N條詞以及對應的拼音串,對其排序,排序規則:首先按拼音串的字母序排序,如果拼音串相同,則按當前詞所在的順序排序,下列哪些排序演算法符合條件?( )
A、 插入排序
B、 快速排序
C、 堆排序
D、 氣泡排序

3、若二叉樹有32個結點且度為1的節點個數有7個,問葉結點有()個?
A、 13
B、 14
C、 12
D、 15

4、下列說法錯誤的是()
B、 已知一顆二叉樹的前序遍歷順序和後序遍歷順序,可以唯一確定這棵二叉樹
B、 將一個遞迴演算法改為非遞迴演算法時,通常使用佇列作為輔助結構
C、 快速排序和堆排序都是不穩定排序
D、 二分查詢法,平均時間複雜度為O(n)

5、下列哪些容器可以使用陣列,但不能使用連結串列來實現?
A、 佇列
B、 棧
C、 優先順序佇列
D、 Map或者Dict

6、請問這是什麼資料結構?
這裡寫圖片描述
A、 B-樹
B、 B樹
C、 B*樹
D、 B+樹

*****************************************************************************************************************************

演算法題 159:扎金花(搜狐2016招聘筆試題)

題目描述

兩個搜狐的程式設計師加了一個月班,終於放假了,於是他們決定扎金花渡過愉快的假期 。

遊戲規則

共52張普通牌,牌面為2,3,4,5,6,7,8,9,10,J,Q,K,A之一,大小遞增,各四張; 每人抓三張牌。兩人比較手中三張牌大小,大的人獲勝。

對於牌型的規則如下:
1.三張牌一樣即為豹子
2.三張牌相連為順子(A23不算順子)
3.有且僅有兩張牌一樣為對子 豹子>順子>對子>普通牌型 在牌型一樣時,比較牌型數值大小(如AAA>KKK,QAK>534,QQ2>10104) 在二人均無特殊牌型時,依次比較三張牌中最大的。大的人獲勝,如果最大的牌一樣,則比較第二大,以此類推(如37K>89Q) 如二人牌面相同,則為平局。

輸入描述:

輸入兩個字串代表兩個玩家的牌(如”10KQ” “354”),先輸入的作為玩家1,後輸入的作為玩家2

輸出描述:

1 代表 玩家1贏 0 代表 平局 -1 代表 玩家2贏 -2 代表不合法的輸入

輸入例子:

KQ3 3Q9
10QA 6102
5810 7KK
632 74J
10102 K77
JKJ 926
68K 27A

輸出例子:

1
1
-1
-1
1
1
-1

*****************************************************************************************************************************