5. 現在假設F是一個森林,B是由F轉換得到的二叉樹,F中有n個非終端結點,B中右指針域為空的結點有( )個?
正确答案: A
N+1
N-1
N+2
N
以隻有兩個節點的森林為例, N = 1, 轉換成二叉樹,兩個節點的右指針域都為空
11. 題目描述
使用者分析是電商資料分析中重要的子產品,在對使用者特征深度了解和使用者需求充分挖掘基礎上,進行全生命周期的營運管理(拉新—>活躍—>留存—>價值提升—>忠誠),請嘗試回答以下3個問題:
① 現在資料庫中有一張使用者交易表order,其中有userid(使用者ID)、orderid(訂單ID)、amount(訂單金額)、paytime(支付時間),請寫出對應的SQL語句,查出每個月的新客數(新客指在嚴選首次支付的使用者),當月有複購的新客數,新客當月複購率(公式=當月有複購的新客數/月總新客數)。
SELECT
order1.年月,
order1.新客戶數 AS 每月新客戶數,
IFNULL(order2.有複購的新客戶數, 0) AS 當月有複購的新客數,
(IFNULL(order2.有複購的新客戶數, 0) / order1.新客戶數) AS 新客當月複購率
FROM
(SELECT
年月, COUNT(userid) AS 新客戶數
FROM
(SELECT
userid, MIN(paytime), 年月
FROM
`order`
GROUP BY userid) AS o1
GROUP BY 年月) AS order1
LEFT JOIN
(SELECT
年月, COUNT(userid) AS `有複購的新客戶數`
FROM
(SELECT
o2.userid, COUNT(o2.userid) AS 次數, o2.年月
FROM
(SELECT
userid, MIN(paytime), 年月
FROM
`order`
GROUP BY userid) AS o1, `order` o2
WHERE
o2.userid = o1.userid
AND o2.年月 = o1.年月
GROUP BY o2.userid) AS o3
WHERE
次數 >= 2
GROUP BY 年月) AS order2 ON order1.年月 = order2.年月
ORDER BY order1.年月;
② 當你發現最近一周APP端新訪使用者當天轉化率(公式=新訪當天支付人數/新訪使用者數,新訪是指首次通路嚴選APP的裝置)環比最近4周日均轉化率大幅下跌(超30%),你會如何去探查背後的原因?請描述你的思路和其中涉及的關鍵名額
參考答案
a. 由于最近一周APP新訪使用者當天轉化率都大幅下跌,是以可以排除偶然事件的影響,判定是産品側出了問題需要改進。
b. 根據轉化率公式=新訪當天支付人數/新訪使用者數,首先判斷是不是在新訪使用者數不變的基礎上、新訪當天支付人數減少了?是哪些人群的支付人數減少了?這些人是否存在管道的差異?如果存在,那麼是哪個管道的人群轉化率降低了?是不是這個管道的素材出了問題?不同的管道對應不同的人群,是不是産品政策最近有改變導緻這個人群下單需求降低?可以通過檢視分管道新訪使用者數和轉化率進行判斷。
c. 然後繼續判斷,是不是新訪使用者數增多,但當天支付人數沒有增多。新訪使用者數增多是所有管道都增多還是個别管道增多?如果是個别管道新訪客增多,那說明産品前期營運做的不錯,對使用者是有一定吸引力的。但為什麼選擇下單的使用者少?是具體哪個功能子產品出了問題?是相關推薦的算法不夠精确還是購物車的設計不夠友善支付?可以檢視各管道的新訪使用者數,當天支付使用者數,各管道的使用者對各功能的使用情況來排查有問題的部分。
③ 在進行使用者營運之前,我們通常會對使用者進行分層,針對不同類型使用者實施差異化的營運政策和資源投入,請你幫助設計嚴選使用者分層的方案,包括關鍵特征的選擇,分層的方法,如涉及模型/算法,請說明選擇的算法類型、基本原理和步驟
a. 使用者分層指的是根據使用者不同的消費傾向與消費偏好,針對性的提供營銷和服務,以極化使用者價值。這裡使用者分層的具體業務目标是,便于進行全生命周期的營運管理(拉新、活躍、留存、價值提升、忠誠)
b. 為了便于進行營運管理,根據全生命周期的幾個階段進行使用者分層,以便對每個階段的使用者實施差異化的政策,将其向下個階段轉化。可以看到每個階段都是對使用者購物行為的一種描述,那麼根據使用者的購物模式來分層。根據使用者的消費金額、最近消費頻率、最近活躍天數、最近活躍行為等關鍵特征分為以下幾層:
客單≥500且最近七天有活躍(高品質使用者,防流失)
近30天購買頻次≥3且近7天未通路(活躍使用者,提高留存)
近7天通路頻次≥5且近7天未購買(需要價值提升)
七天内注冊使用者且無下單購買(新使用者需要開單)
客單≥500且近7天未通路(提高活躍度)
c. 由于消費金額/頻率/活躍天數這些都是連續型資料,且資料量較大,是以用Kmeans聚類算法。
12. 網易嚴選是網易旗下原創生活類自營電商品牌,深度貫徹“好的生活,沒那麼貴”的品牌理念。商品覆寫居家、餐廚、配件、服裝、洗護、母嬰、原生态飲食等幾大類目,兼具品質和成本效益,得到使用者的廣泛好評。若你是網易嚴選負責商品的資料分析師,當面對以下業務問題時,你會如何解決?
① 居家品類期望了解購買居家類目的使用者是哪群人,期望你幫助她進行品類使用者畫像的建構,以作為居家品類規劃和商品營運的參考,你會從哪些次元去完成類目使用者的刻畫?
- 建構居家品類使用者畫像的目的是,了解這類使用者的特征進而了解他們的需求,進而作為參考幫助營運給使用者提供差別化的對待、個性化的服務,達到提升使用者購物體驗進而提升平台流水的效果。
-
要具體的刻畫購買居家品類的使用者,要從和居家有關系的方面入手,涵蓋盡可能多的方面。根據以上具體業務目标,我選用以下次元描述購買居家類目的使用者:
①自然屬性 年齡,性别;
②社會屬性 職業,住在哪裡,婚戀狀況,教育程度;
③興趣屬性 喜歡進行的活動,花費時間最多的工作之外的活動,是否養寵物
④消費屬性 消費頻次,消費額,最喜歡購買哪個品牌的居家類商品,購買次數最多的居家類商品是什麼。這些資料平台本身容易獲得,對于個别資料如婚戀狀況、教育程度等可以通過問卷的形式收集得到。
② 如果需要選擇一批商品來吸引新使用者,你會從哪些次元進行選擇?請寫出次元,選擇的原因,對應的名額
- 從商品品類次元選,各種品類的商品都挑選,顯示出網易嚴選商品的齊全、種類多。涉及到的名額有,覆寫到的商品類目有多少、商品類目有哪些。
- 從商品品質次元選,顯示出網易嚴標明位的一大特點:品質優,這對于商品來說是一個硬核項。要直覺的表示商品品質不太容易,可以利用品牌效應,選大牌商品,列舉出網易嚴選平台上有多少垂直領域裡的大牌,突出平台的定位。涉及到的名額有:網易嚴選有多少大牌/專業品牌,具體到每個領域的大牌有哪些
- 從商品成本效益次元選,顯示出網易嚴標明位的另一大特點:成本效益高。涉及到的名額有:優質商品在網易嚴選的定價和在其他平台的定價對比
-
從商品好評率次元選,選好評率最高的,讓使用者的贊揚聲感染更多的使用者。涉
及到的名額有:商品評價裡好評個數/評價總數
13.小易給定你數字A, B(A<B)和系數p, q。每次操作你可以将A變成A+p或者将p變成p*q。問至少幾次操作使得B<=A。
輸入描述:
第一行資料組數 T , 對于每組資料,一行四個整數 A , B , p , q 。 1 ≤ A , p , B ≤ 1 0 9 , 2 ≤ q ≤ 10 , 1 ≤ T ≤ 5 \begin{aligned} &\text { 第一行資料組數 } T, \text { 對于每組資料,一行四個整數 } A, B, p, q。\\ &1 \leq A, p, B \leq 10^{9}, 2 \leq q \leq 10,1 \leq T \leq 5 \end{aligned} 第一行資料組數 T, 對于每組資料,一行四個整數 A,B,p,q。1≤A,p,B≤109,2≤q≤10,1≤T≤5
T = int(input())
for i in range(T):
A,B,p,q = map(int, input().split()) # how to read in the data
k = 0
while(A < B):
if (A + p >= B):
A = A + p
else:
p = p * q
k = k + 1
print(k)
14. 有三種葡萄,每種分别有a, b, c顆。有三個人,第一個人隻吃第1,2種葡萄,第二個人隻吃第2,3種葡萄,第三個人隻吃第1,3種葡萄。
适當安排三個人使得吃完所有的葡萄,并且且三個人中吃的最多的那個人吃得盡量少。
輸入描述:
第一行數字 T , T, T, 表示資料組數。接下來 T T T 行,每行三個數 a , b , c a, b, c a,b,c 1 ≤ a , b , c ≤ 1 0 18 , 1 ≤ T ≤ 10 1 \leq a, b, c \leq 10^{18}, 1 \leq T \leq 10 1≤a,b,c≤1018,1≤T≤10
輸出描述:對于每組資料,輸出一行一個數字表示三個人中吃的最多的那個人吃的數量。
import math
T = int(input())
for i in range(T):
x,y,z = map(int, input().split())
maxn = max(x,y,z)
total= x + y + z
if maxn // 2 >= total - maxn:
print((maxn + 1) // 2)
else:
print((total + 2) // 3)
對于進位的操作:
t=int(input())
for _ in range(t):
a,b,c=map(int,input().split())
maxnum=max(a,b,c)
total=a+b+c
if maxnum//2>=total-maxnum:
if maxnum%2==0:
print(maxnum//2)
else:
print((maxnum+1)//2)
else:
if total%3==0:
print(total//3)
elif total%3==1:
print((total+2)//3)
else:
print((total+1)//3)
15.
n = int(input())
for i in range(n):
T = int(input())
a = list(map(int, input().split()))
i, j = 0, 1
cur = 0
while j < len(a) and i < len(a):
while j < len(a) and sum(a[i:j]) <= a[j]:
j += 1
cur = max(cur, j - i)
i = j
j = i + 1
print(cur)
16.
from collections import Counter
n,m = map(int,input().split())
salary = list(map(int,input().split()))
count_dict = Counter(salary)
for i in range(m):
question = int(input().strip())
print(count_dict[question])