牛客网——网易2017秋招编程题集合

在牛客网做的“网易2017秋招编程题集合”练习题。

注:部分题解法学习于他人的解法。

回文序列

题目 牛客网——网易2017秋招编程题集合1 样例 牛客网——网易2017秋招编程题集合2 思路 两个指针前后同时开始遍历,互相比较,哪边小哪边往中间移并加上前一个遍历的值,记录转换次数,直至不小于,然后判断是否相等,相等则i、j同时往中间移一位进入下一轮循环,不相等则继续判断哪边小哪边往中间移。

代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int len=in.nextInt();
        int[] item=new int[len];
        for(int i=0;i<len;i++){
            item[i]=in.nextInt();
        }
        in.close();
 
        int count=0;    //转换次数
        int i=0, j=len-1;
        while(i<j){
            while(i<j && item[i]<item[j]){
                i++;
                item[i] += item[i-1];	//加上前一个遍历的值
                count++;
            }
            if(item[i]==item[j]){
                i++;
                j--;
                continue;	//相等则同时向中间移,并进入下一轮循环
            }
            while(i<j && item[i]>item[j]){
                j--;
                item[j] += item[j+1];
                count++;
            }
            if(item[i]==item[j]){
                i++;
                j--;
                continue;
            }
        }
        System.out.println(count);
    }
}

优雅的点

题目 牛客网——网易2017秋招编程题集合3 样例 牛客网——网易2017秋招编程题集合4 思路 根据半径平方计算出半径(double),强转为int,截取后32位,然后x从半径遍历到0,计算出y,判断x和y的平方和是否等于半径平方,若相等则优雅点加1。 代码

跳石板

题目 牛客网——网易2017秋招编程题集合5 样例 牛客网——网易2017秋招编程题集合6 思路 运用动态规划。创建数组记录到达每个石板所需最少步数,石板编号为数组索引,到达该石板所需最少步数为数组值。到达起始位置所需步数为0,所以初始化数组起始位置为0,其余部分初始化为无穷大(Integer.MAX_VALUE)。遍历数组,如果数组值为无穷大,即为不可达,跳过进入下一轮循环;如果数组值不是无穷大,获取当前石板编号的所有约数(不含1和它本身),依次遍历,计算能到达的下一石板,步数在当前基础上加1,如果小于下一石板最小步数则更新。 代码

暗黑的字符串

题目 牛客网——网易2017秋招编程题集合7 样例 牛客网——网易2017秋招编程题集合8 思路 计算长度为n的字符串有多少个是暗黑字符串(记为f(n)),跟n-1时状态有关。 从n-1往后扩展一位还要保证是暗黑串,则只需要知道n-1状态末尾两个字符是否相同,相同记为S(n-1),不相同记为D(n-1),则f(n-1)=S(n-1)+D(n-1)。 若n-1状态末尾两个字符相同,则保持暗黑串添加‘A’、‘B’和‘C’均可,即有3*S(n-1)种; 若n-1状态末尾两个字符不同,则保持暗黑串只能添加末尾两个字母中的一个,即有2*D(n-1)种。 所以f(n)=3*S(n-1)+2*D(n-1)=2*f(n-1)+S(n-1)。 S(n-1)项无法消除,需要考虑寻找S(n-1)和f(n-2)之间的关系。 如果n-1状态末尾两个字符相同,则扩展后有1/3是末尾两个字符相同(有S(n-1)种),2/3是不相同(有2*S(n-1)种)。 如果n-1状态末尾两个字符不同,则扩展后有1/2是末尾两个字符相同(有D(n-1)种),1/2是不相同(有D(n-1)种)。 所以S(n)=S(n-1)+D(n-1),D(n)=2*S(n-1)+D(n-1)。因此可以得到S(n)=f(n-1),代入f(n)=2*f(n-1)+S(n-1)中, 得到:f(n)=2*f(n-1)+f(n-1)代码

数字翻转

题目 牛客网——网易2017秋招编程题集合9 样例 牛客网——网易2017秋招编程题集合10 思路 依次计算数字的每一位,存放到ArrayList中,然后反向遍历,从非0数开始,依次乘以相应位的倍数。 代码

最大的奇约数

题目 牛客网——网易2017秋招编程题集合11 样例 牛客网——网易2017秋招编程题集合12 思路 代码

买苹果

题目 牛客网——网易2017秋招编程题集合13 样例 牛客网——网易2017秋招编程题集合14 思路 代码

计算糖果

题目 牛客网——网易2017秋招编程题集合15 样例 牛客网——网易2017秋招编程题集合16 思路 代码

Last updated