1. 程式人生 > >《面試程式設計題真題合集(三)——華為2019校園招聘真題題解》

《面試程式設計題真題合集(三)——華為2019校園招聘真題題解》

面試題一:獲取最長對稱串的長度

題目描述:

輸入一個字串,輸出該字串中對稱的子字串的最大長度,比如輸入字串“12213”,由於該
字串裡最長的對稱子字串是“1221”,因此輸出為4.
輸入描述:
連續的字串,字串長度不超過64,只包含數字和字母
輸出描述:
最長的對稱字串長度
示例1:
輸入
12321abc
輸出

5

import java.util.Scanner;

public class Main {
	/**
	 * 華為2019春招面試程式設計題:獲取最長的對稱字串長度
	 * @param str
	 * @return
	 */
	public static int GetlongestSymStr(String str){  
        int n=str.length();  
        boolean[][] dp=new boolean[n][n];  
        int maxLen=0;  
        for(int i=0;i<n;i++){  
            for(int j=i;j>=0;j--){   
                if(str.charAt(i)==str.charAt(j) && (i-j<2 || dp[j+1][i-1]==true)){  
                    dp[j][i]=true;  
                    maxLen=Math.max(maxLen, i-j+1);  
                }  
            }  
        }  
        return maxLen;  
    } 
	public static void main(String[] args){ 
        Scanner sc = new Scanner(System.in);    
        String s = sc.nextLine();  
        System.out.println(GetlongestSymStr(s));  
	}
}

面試題二:IPV6地址分類

題目描述:

ipv6地址為128位,完整的文字格式寫成8段16位的形式,例如:
2001:1002:FFFF:ABCD:1234:1234:0000:0001
簡寫時,會將其中全0的欄位壓縮,例如:
2001:0000:0000:0000:0000:0000:0000:0001會簡寫成2001::0001
0000:0000:0000:0000:0000:0000:0000:0001會簡寫成::0001或者::1
ipv6地址包括以下型別:
地址型別地址字首(二進位制)ipv6字首標識
單播地址未指定地址00....0(128 bits)::/128
環回地址00...1(128 bits)::1/128
鏈路地址1111111010FE80::/10
站點本地地址1111111011FEC0::/10
全球單播地址其他形式
組播地址11111111FF00::/8

任播地址從單播地址空間進行分配,使用單播地址的格式

備註:地址標識中一般以“/"後帶的數字來表示掩碼,例如上面的"FF00::/8"表示的是前8位元為1,後面120位元為任意值。請實現一段程式碼,來判斷輸入的IPV6地址字串的型別
輸入描述:
一行字串,完整形式的IPV6地址
輸出描述:
輸出一個字串,表示是何種型別的IPV6地址,輸出可以是:
Unspecified未指定地址
Loopback環回地址
LinkLocal鏈路本地地址
SiteLocal站點本地地址
GlobalUnicast全球單播地址
Multicast組播地址
Error錯誤的地址,或者非完整形式IPV6地址的字串
示例1:
輸入:
FE81:0001:0000:0000:FF01:0203:0405:0607
輸出:

LinkLocal

(程式碼帶更新)

面試題目三:應用下載順序

題目描述:

華為應用市場舉辦安裝應用獎勵金幣活動,不同的應用下載、試玩需要的流量大小不同,獎勵的金幣數量也不同,同一個應用多次下載只獎勵一次金幣,小花月末有一定的餘量,計算下載哪些應用可以獲取的金幣最多?相同金幣情況下,優先排名靠前的應用
輸入描述:
輸入分三行
第一行:流量數,單位MB,整數
第二行:應用排名順序,下載、試玩需要流量數,單位MB,整數
第三行:應用獎勵的金幣數
輸出描述:
輸出應用列表:建議下載的應用順序號,用一個空格分隔
示例1:
輸入
40
12 13 23 36
11 11 20 30
輸出:
1 3
說明:

注意輸出:開頭、末尾沒有空格

思路分析:

本題實際是一個01揹包模型,具體分析參考我的另一篇有關揹包問題的文章。

import java.util.Scanner;

public class Main{
	/**
	 * 華為2019春招面試程式設計題:應用下載順序
	 * @param numOfLL 剩餘流量數
	 * @param needLL 下載應用排名及消耗流量數
	 * @param reword 下載獎勵金幣數
	 * @return
	 */
	public static String SequenceOfDownload(int numOfLL,int[] needLL,int[] reword){
		
		return ZeroOnePack(numOfLL,needLL.length,needLL,reword);
	}
	/**
	 * @param V	揹包容量
	 * @param N	物品種類
	 * @param weight 物品重量
	 * @param value	物品價值
	 * @return
	 */
	public static String ZeroOnePack(int V,int N,int[] weight,int[] value){
		
		//初始化動態規劃陣列
		int[][] dp = new int[N+1][V+1];
		//為了便於理解,將dp[i][0]和dp[0][j]均置為0,從1開始計算
		for(int i=1;i<N+1;i++){
			for(int j=1;j<V+1;j++){
				//如果第i件物品的重量大於揹包容量j,則不裝入揹包
				//由於weight和value陣列下標都是從0開始,故注意第i個物品的重量為weight[i-1],價值為value[i-1]
				if(weight[i-1] > j)
					dp[i][j] = dp[i-1][j];
				else
					dp[i][j] = Math.max(dp[i-1][j],dp[i-1][j-weight[i-1]]+value[i-1]);
			}
		}
		//則容量為V的揹包能夠裝入物品的最大值為
		int maxValue = dp[N][V];
		//逆推找出裝入揹包的所有商品的編號
		int j=V;
		String numStr="";
		for(int i=N;i>0;i--){
			//若果dp[i][j]>dp[i-1][j],這說明第i件物品是放入揹包的
			if(dp[i][j]>dp[i-1][j]){
				numStr = i+" "+numStr;
				j=j-weight[i-1];
			}
			if(j==0)
				break;
		}
		return numStr;	
	}
	public static void main(String[] args){ 
		Scanner sc = new Scanner(System.in);  
        int numOfLL = Integer.parseInt(sc.nextLine());
        String str2 = sc.nextLine();
        String str3 = sc.nextLine();
        String[] needLL;
        String[] reword;
        needLL= str2.split(" ");
        reword = str3.split(" ");
        
        int[] Reword = new int[needLL.length];
        int[] NeedLL = new int[reword.length];
        for(int i=0;i<needLL.length;i++){
        	NeedLL[i] = Integer.parseInt(needLL[i]);
        	Reword[i] = Integer.parseInt(reword[i]);
        }
        String result = SequenceOfDownload(numOfLL,NeedLL,Reword);
        result = result.substring(0,result.length()-1);
        System.out.println(result); 
        sc.close();  
	}
}