华为2018勇敢星实习软件类笔试(java)

     本人化学小硕一枚,因为本行业对我这种缺钱的人来说太不友善,无奈要走上码农之路。虽然本科阶段辅修过武汉七校的CS双学位,但是理论和技术一直都很渣,python和java还是稀烂。马上就要找工作了,现在连个互联网实习都找不到,心里实在很心酸。想着化学学得也不差,但是研究生阶段的实验好像并不怎么用脑子,头都快生锈了。我不想人生就这样混过去,想来点刺激点的,秃就秃吧。抱着试一试的心态,撸起袖子赶紧干,时间已经不多了。一边看视频,一边刷网上的面试试题。今天做了一下华为的实习笔试试题,难度也不算很大,虽然花的时间有点长,慢慢来总是可以的。

话不多说,先看第一题。

校招题1 字符串重排

给定一个原始字符串,统计字符串中各字符出现的次数,并按照ASCII码递增的顺序依次输出。

例:原始字符串为eeefgghh

统计字符串中各字符的出现次数:

        e : 3

        f  : 1

        g : 2

        h : 2

重排字符串输出为:efgheghe

说明:给定的原字符串只包含数字和字母,大写字母和小写字母存在区别。

样例输入输出:

eeefgghh

efgheghe

这道题主要是要把字符产分出来先放进对应的数组里面,然后再按照顺序输出。具体代码直接贴出来了,先不分析了:
public class Hero{
public static void main(String [] args) {
    String demo="abbdcdacbcadeef";
    System.out.println(getStringSorted(demo));
    }
public static String getStringSorted(String str) {
   char c[]=str.toCharArray();
   int [] indexArray=new int [123];
   int maxLength=0;
   for(char x:c) {
    maxLength=(maxLength>indexArray[x]++?maxLength:indexArray[x]);
   }
   String []s=new String[maxLength];
   for(int j=0;j<s.length;j++) {
    for(int k=0;k<indexArray.length;k++) {
    if(indexArray[k]>0) {
    if (s[j]==null) {
    s[j]=String.valueOf((char)k);
    }
    else {
    s[j]=s[j]+(char)k;
    }
    indexArray[k]--;
    }
    }
   }
   String string="";
   for(String k:s) {
    string+=k;
   }
  return string;
}

}

第二题是一道关于dp的问题,但是我这里没有用到这个思想,因为比较难实现。

题目描述 
给出一组正整数,你从第一个数向最后一个数方向跳跃,每次至少跳跃1格,每个数的值表示你从这个位置可以跳跃的最大长度。计算如何以最少的跳跃次数跳到最后一个数。

输入描述: 
第一行表示有多少个数n 
第二行开始依次是1到n个数,一个数一行

输出描述: 
输出一行,表示最少跳跃的次数。

示例1 
输入 








输出 
3

说明 
7表示接下来要输入7个正整数,从2开始。数字本身代表可以跳跃的最大步长,此时有2种跳法,为2-2-2-5和2-3-2-5都为3步,这里没有具体要求方案,只需求出最后的步数,那我们就直接从终点往前分析,比较容易的可以看出每次取离终点最远的那个点作为出发点。比如2,3,2,1,2,1,5.能直接一步到达终点且离终点最远的是倒数第三个点,值为2,可以证明这样做是对的。代码直接贴上:import java.util.Scanner;


public class Hero{
   public static void main(String args []){
        Scanner sc=new Scanner(System.in);
        int x=sc.nextInt();
        int [] array=new int [x];
        for (int i = 0; i < array.length; i++) {
array[i]=sc.nextInt();
}
        sc.close();
        int min=0;
        int n=x-1;
        System.out.println(n);
        while(n>0) {
        for (int i = 0; i<n; i++) {
        if(array[i]>=n-i) {
        n=i;
        min+=1;
       
        }
}
       
        }
        System.out.println(min);
}
}

第三题不是很清楚他的意思,先不做了。今天先写到这里,继续看视频。。。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值