4月9日-云智-后臺開發(fā)-26暑期實習(xí)筆試
??筆試公司
云智研發(fā)公司
??筆試崗位
后臺開發(fā)-2026屆暑期實習(xí)生
??筆試問題
題型及要求
20個單項選擇題,一個兩分,40分;3道算法題,是ACM模式,60分,提示說可以在本地IDE上寫代碼,之后再粘貼到答題框。用的是??途W(wǎng)的系統(tǒng),雙機位,手機需要用微信掃碼后保持在那個界面(不過手機沒要求開啟攝像頭),建議考前充滿電或考試時插上充電器。
具體內(nèi)容
一、選擇題
具體內(nèi)容記不太清了,大概有MySQL、Redis、計算機網(wǎng)絡(luò)、Java基礎(chǔ)等,個人感覺難度適中。
二、編程題
1.階乘中0的個數(shù)
輸入一個整數(shù) n,計算 n! 中含有多少個 0。
例如,
輸入:
12
輸出:
4
解釋:12! = 479001600,有4 個 0 ,則輸出 4。
個人解法:暴力求解,先求 n!,再 %10、/10 求結(jié)果中 0 的個數(shù)。(注意題目中 n 的范圍,用 int 接收 n! 會有溢出,需要使用 long)
2.數(shù)組涂紅
輸入一個整數(shù)數(shù)組,小紅每次涂紅其中的幾個數(shù),求未涂紅的數(shù)的和。
第一行的兩個數(shù) n,k 分別表示數(shù)組長度和涂紅的個數(shù),第二行為整數(shù)數(shù)組,第三行為涂紅的序號(從 1 開始)。
例如,
輸入:
5 2
2 5 1 8 4
1 3
輸出:
17
解釋:第 1 個和第 3 個數(shù)涂紅,則不涂紅的數(shù)的和為 5 + 8 + 4 = 17。
個人解法:暴力求解,先求整個數(shù)組的元素和,再減去涂紅數(shù)字的和。(注意題目中數(shù)組元素的范圍,用 int 接收元素和會有溢出,需要使用 long)
3.合法計算式
輸入一個只含有 '+'、'-' 和數(shù)字的字符串, 求從第 1 個字符開始組成的最大合法計算式的長度。
例如,
輸入:
+348-234
輸出:
0
解釋:從首個字符開始無合法計算式。
輸入:
2+072
輸出:
1
解釋:合法計算式為 2( 072 不合法)。
輸入:
234-+21
輸出:
3
解釋:合法計算式為 234。
個人解法:暴力求解,列舉不合法的情況后排除,不過應(yīng)該是沒列舉全,只過了 30% 測試用例。
今天讓 DeepSeek R1 試了一下,看起來應(yīng)該是正確的,不過沒處理輸入輸出,回答如下:
“為了解決這個問題,我們需要找到從字符串的第一個字符開始的最長合法計算式的長度。合法計算式的定義是:由數(shù)字和運算符交替組成,并且每個數(shù)字必須是合法的(即不以零開頭,除非該數(shù)字本身就是零)。
方法思路
(1)初始檢查:首先檢查字符串是否以數(shù)字開頭,如果不是,直接返回0。
(2)處理第一個數(shù)字:找到第一個數(shù)字的結(jié)束位置,并檢查該數(shù)字是否合法。如果該數(shù)字以零開頭且長度大于1,則視為非法,此時最長合法長度為1。
(3)處理后續(xù)運算符和數(shù)字:在第一個數(shù)字合法的情況下,繼續(xù)處理后續(xù)的運算符和數(shù)字。每次遇到運算符后,檢查后面是否有合法數(shù)字,直到無法繼續(xù)為止。
解決代碼
public class Solution { public int longestValidExpression(String s) { if (s == null || s.length() == 0) { return 0; } // 檢查第一個字符是否是數(shù)字 if (!Character.isDigit(s.charAt(0))) { return 0; } int maxLen = 0; int n = s.length(); // 處理第一個數(shù)字 int i = 0; while (i < n && Character.isDigit(s.charAt(i))) { i++; } int firstNumberLength = i; boolean firstNumberValid = true; if (firstNumberLength > 1 && s.charAt(0) == '0') { firstNumberValid = false; } if (firstNumberValid) { maxLen = firstNumberLength; // 處理后續(xù)的運算符和數(shù)字 int pos = firstNumberLength; while (pos < n) { // 檢查當前字符是否是運算符 if (s.charAt(pos) != '+' && s.charAt(pos) != '-') { break; } // 運算符后面必須有數(shù)字 int numStart = pos + 1; if (numStart >= n) { break; } int j = numStart; while (j < n && Character.isDigit(s.charAt(j))) { j++; } int numLength = j - numStart; if (numLength == 0) { break; } // 檢查數(shù)字是否合法 boolean numValid = true; if (numLength > 1 && s.charAt(numStart) == '0') { numValid = false; } if (numValid) { maxLen = j; // 當前總長度為j的位置(0到j(luò)-1) pos = j; } else { break; } } } else { // 第一個數(shù)字以0開頭且長度>1,合法部分只能是0 maxLen = 1; } return maxLen; } }
代碼解釋
(1)初始檢查:首先檢查輸入字符串是否為空或第一個字符是否為非數(shù)字,若是則返回0。
(2)處理第一個數(shù)字:通過循環(huán)找到第一個數(shù)字的結(jié)束位置,并檢查其合法性。如果該數(shù)字以零開頭且長度大于1,則視為非法,最長合法長度設(shè)為1。
(3)處理后續(xù)運算符和數(shù)字:在第一個數(shù)字合法的情況下,依次處理每個運算符及其后面的數(shù)字。每次遇到運算符后,檢查后續(xù)數(shù)字的合法性,合法則更新最長長度,非法則終止循環(huán)?!?/p>
以上題目內(nèi)容全憑記憶,如果有錯誤,歡迎指出!或者算法題有更優(yōu)的解法也可提出!祝大家一切順利!
#軟件開發(fā)筆面經(jīng)##筆試#