博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蘑菇街2018实习笔试题
阅读量:5213 次
发布时间:2019-06-14

本文共 2827 字,大约阅读时间需要 9 分钟。

前面面试华为状态不佳,然后就挂了,华为不聊技术只聊人生,莫名其妙地没有进二面,应该是水平不够吧。等了很久,蘑菇街给了笔试机会。

太久没有做笔试题了,突然来了一份笔试,想了很久,两道题都没有AC,还不知道有没有面试机会,暂且记录一下笔试题吧。都是宝贵的经验!都是常规题目!

  • 重复元素的全排列

基本原理:比如输入123,则1开头,对[2,3]全排列,2开头,对[1,3]全排列,3开头,对[2,1]全排列。。。如此类推,构成一个树。数组中所有的值都和第一个值交换后,在对第一个数组后面的数组进行全排列。注意考虑重复元素的状况,先对数组进行排序,如果前后值相同且前一个值被交换过,则跳过当前值。

import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Scanner;public class NoPermutation{    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        String s = scanner.nextLine();        char[] chars = s.toCharArray();        //char[] chars = new char[]{'a','c','c'};        Arrays.sort(chars);        boolean[] booleans = new boolean[chars.length];        List
stringBuilders = new ArrayList<>(); permute(chars,0,chars.length,stringBuilders,booleans); System.out.print(stringBuilders.toString()); } public static void swap(char[] chars,int i,int j){ char temp = chars[i]; chars[i] = chars[j]; chars[j] = temp; } public static void permute(char[] chars,int m,int n,List
stringBuilders,boolean[] booleans){ if (m==n){ StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < n; i++) { stringBuilder.append(chars[i]); } stringBuilders.add(stringBuilder); return; } for (int i = m; i < n; i++) { if (i>0&&chars[i]==chars[i-1]&&!booleans[i-1]) continue; booleans[i] = true; swap(chars,i,m);//关键 permute(chars,m+1,n,stringBuilders,booleans); swap(chars,i,m); booleans[i] = false; } }}
  • 分糖果问题

基本原理:定义一个全为1的数组mincandy,先从左往右遍历rate,如果rate[i]>rate[i-1],则mincandy[i]=mincandy[i-1]+1,然后从右往左遍历rate,如果rate[i]>rate[i+1]&&mincandy[i]<mincandy[i+1]+1,则mincandy[i] = mincandy[i+1]+1。

import java.util.Arrays;import java.util.Scanner;public class Candy {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        String in = scanner.nextLine();        String[] ratings = in.split(" ");        System.out.print(mincandy(ratings));    }    public static int mincandy(String[] ratings){        int[] rates = new int[ratings.length];        for (int i = 0; i < ratings.length; i++) {            rates[i] = Integer.parseInt(ratings[i]);        }        int[] mincandy = new int[ratings.length];        Arrays.fill(mincandy,1);        for (int i = 1; i < ratings.length; i++) {            if (rates[i]>rates[i-1]){                mincandy[i] = mincandy[i-1]+1;            }        }        int sum = mincandy[rates.length-1];        for (int i = rates.length-2; i >= 0 ; i--) {            if (rates[i]>rates[i+1]&&mincandy[i]

转载于:https://www.cnblogs.com/bingo2-here/p/8981214.html

你可能感兴趣的文章
JS 多种变量定义
查看>>
redis可执行文件说明
查看>>
ajax向后台传递数组
查看>>
剑指offer系列14:包含min函数的栈
查看>>
疯狂JAVA16课之对象与内存控制
查看>>
[转载]树、森林和二叉树的转换
查看>>
WPF移动Window窗体(鼠标点击左键移动窗体自定义行为)
查看>>
1593: [Usaco2008 Feb]Hotel 旅馆 (线段树)
查看>>
软件测试-----Graph Coverage作业
查看>>
django ORM创建数据库方法
查看>>
创建Oracle synonym 详解
查看>>
php7 新特性整理
查看>>
RabbitMQ、Redis、Memcache、SQLAlchemy
查看>>
linux查看端口占用
查看>>
hdu - 1226 超级密码 (bfs)
查看>>
Qt重写paintEvent方法遇到的问题
查看>>
Sql常见面试题 受用了
查看>>
知识不是来炫耀的,而是来分享的-----现在的人们却…似乎开始变味了…
查看>>
CSS背景颜色、背景图片、平铺、定位、固定
查看>>
口胡:[HNOI2011]数学作业
查看>>