2019年華為春招實習筆試題
阿新 • • 發佈:2019-01-01
1.字串重排
題目描述
給你一個原始字串,根據該字串內每個字元出現的次數,按照ASCII碼遞增順序重新調整輸出。【溫馨提示】
(1).原始字串中僅可能出現“數字”和“字母”;
(2).請注意區分字母大小寫。
輸入描述:
eeefgghhh
輸出描述:
efghegheh
示例1
輸入
eeefgghhh
輸出
efghegheh
分析:簡要步驟分析:
1.從字串頭開始,將每個字元取出作為鍵值,裝入TreeMap集合,字元出現的次數作為TreeMap的值
2.遍歷TreeMap集合,找到字元重複最多的次數,計為count
3.遍歷集合count次,輸出集合的鍵值,每次輸出後,將鍵對應的值減去1
程式碼實現:
import java.util.Scanner; import java.util.TreeMap; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()) { String str = in.next(); char[] ch = str.toCharArray(); TreeMap<Character,Integer> treeMap = new TreeMap<>();//採用TreeMap,是因為可以用它排序 for(int i=0;i<ch.length;i++) { if(treeMap.containsKey(ch[i])) treeMap.put(ch[i], treeMap.get(ch[i])+1); else treeMap.put(ch[i],1); } int count = 0; for(char c:treeMap.keySet()) //獲取重複最多的字元的重複次數 { if(treeMap.get(c)>count) count = treeMap.get(c); } for(int i=0;i<count;i++) { for(char c:treeMap.keySet()) { if(treeMap.get(c)>0) //有些字元已經為0了,就不在輸出了 { treeMap.put(c, treeMap.get(c)-1); System.out.print(c); } } } System.out.println(); } } }
2.跳躍比賽
題目
題目描述
給出一組正整數,你從第一個數向最後一個數方向跳躍,每次至少跳躍1格,每個數的值表示你從這個位置可以跳躍的最大長度。計算如何以最少的跳躍次數跳到最後一個數。
輸入描述:
第一行表示有多少個數n
第二行開始依次是1到n個數,一個數一行
輸出描述:
輸出一行,表示最少跳躍的次數。
示例1
輸入
7
2
3
2
1
2
1
5
輸出
3
分析:這是道題可以用貪心演算法,找一個簡單的例子,[2,3,1,1,4],從下標為0可以選擇跳到下標為1或者下標為2的位置,對於是跳下標為1的位置還是跳到下標為2的位置,這時採用的方式是考慮,在跳到某個下標後從這個下標可以跳到更遠的位置,例如,在下標為1處,下次可以跳到下標為4處(1+a[1]=4),而在下標為2的位置,下次可以跳到(2+a[2]=3),那麼就選擇從下標為0跳到下標為1處,後面的跳法依舊。
class TanXin
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
while(in.hasNext())
{
int n = in.nextInt();
int[] nums = new int[n];
for(int k=0;k<n;k++)
{
nums[k] = in.nextInt();
}
int i = 0;
int j = 0; //j用來記錄從下標為j,可以跳到更遠的位置
int max = 0;
int count= 0; //記錄跳躍的次數
while(i+nums[i]<nums.length)
{
for(int k=i;k<=i+nums[i];k++)
{
if(k+nums[k]>max)
{
j = k;
max = k + nums[k];
}
}
i = j;
count++;
max = 0;
}
System.out.println("count: "+count);
}
}
}