京东2018秋招笔试编程题集合

简介: 1.括号匹配方案合法的括号匹配序列被定义为:空串""是合法的括号序列如果"X"和"Y"是合法的序列,那么"XY"也是一个合法的括号序列如果"X"是一个合法的序列,那么"(X)"也是一个合法的括号序列每个合法的括号序列都可以由上面的规则生成例如"", "()", "()()()", "(()())", "(((())))"都是合法的。
img_055b9c7232b5d9b1d7c9868209bdce05.jpe

1.括号匹配方案

合法的括号匹配序列被定义为:

  1. 空串""是合法的括号序列
  2. 如果"X"和"Y"是合法的序列,那么"XY"也是一个合法的括号序列
  3. 如果"X"是一个合法的序列,那么"(X)"也是一个合法的括号序列
  4. 每个合法的括号序列都可以由上面的规则生成

例如"", "()", "()()()", "(()())", "(((())))"都是合法的。 东东现在有一个合法的括号序列s,一次移除操作分为两步:

  1. 移除序列s中第一个左括号
  2. 移除序列s中任意一个右括号.保证操作之后s还是一个合法的括号序列

东东现在想知道使用上述的移除操作有多少种方案可以把序列s变为空

如果两个方案中有一次移除操作移除的是不同的右括号就认为是不同的方案。

例如: s = "()()()()()",输出1, 因为每次都只能选择被移除的左括号所相邻的右括号.

s = "(((())))",输出24, 第一次有4种情况, 第二次有3种情况, ... ,依次类推, 4 * 3 * 2 * 1 = 24

输入描述:

输入包括一行,一个合法的括号序列s,序列长度length(2 ≤ length ≤ 20).

输出描述:

输出一个整数,表示方案数

输入例子1:

(((())))

输出例子1:

24

思路:

  1. 遍历字符串,每次把左括号都压入栈,每次遇到右括号,先统计栈中有几个左括号,统计数与上次统计数相乘
  2. 接着弹出栈中的一个左括号
  3. 直到遍历结束,结果即为方案数

代码:

import java.util.Scanner;
import java.util.Stack;

public class BracketMatch {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();

        Stack<Character> stack = new Stack<>();
        int result = 1;
        char c;

        for (int i = 0; i < s.length(); i++) {
            c = s.charAt(i);
            if (c == '(') {
                stack.push(c);

            }
            if (c == ')') {
                int size = stack.size();
                result *= size;
                stack.pop();
            }
        }

        System.out.println(result);
    }
}

2.神奇数

东东在一本古籍上看到有一种神奇数,如果能够将一个数的数字分成两组,其中一组数字的和等于另一组数字的和,我们就将这个数称为神奇数。例如242就是一个神奇数,我们能够将这个数的数字分成两组,分别是{2,2}以及{4},而且这两组数的和都是4.东东现在需要统计给定区间中有多少个神奇数,即给定区间[l, r],统计这个区间中有多少个神奇数,请你来帮助他。

输入描述:

输入包括一行,一行中两个整数l和r(1 ≤ l, r ≤ 10^9, 0 ≤ r - l ≤ 10^6),以空格分割

输出描述:

输出一个整数,即区间内的神奇数个数

输入例子1:

1 50

输出例子1:

4

思路:

首先判断数组能否被平分,即数组分割问题,
dp[i][j]表示数组前i个数字能否求和得到 j
则dp[i][j]=dp[i−1][j]||dp[i−1][j−array[i]],其中||是逻辑或运算。
优化:
1、若sum(array)为奇数,直接返回false
2、使用逆序循环将dp数组简化为一维数组

代码:

import java.util.Arrays;
import java.util.Scanner;

public class MagicNumber {
    public static boolean isMagic(int[] nums, int sum) {
        int len = nums.length;

        if (sum % 2 != 0)
            return false;

        int mid = sum / 2;

        int[] dp = new int[mid + 1];
        dp[0] = 1;
        for (int i = 0; i < len; i++) {
            for (int j = mid; j > 0; j--) {
                if (j >= nums[i] && nums[i] != -1)
                    dp[j] = Math.max(dp[j], dp[j - nums[i]]);
            }
        }
        if (dp[mid] > 0)
            return true;
        else
            return false;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int l = sc.nextInt();
        int r = sc.nextInt();

        int result = 0;

        for (int i = l; i <= r; i++) {

            int num = I;
            int[] nums = new int[10];
            int sum = 0;
            Arrays.fill(nums, -1);
            int index = 0;
            while (num > 0) {
                int temp = num % 10;
                nums[index++] = temp;
                sum += temp;
                num = num / 10;
            }

            if (isMagic(nums, sum)) {
                result++;
            }
        }

        System.out.println(result);
    }

}
目录
相关文章
Java开发5年,复习1个月成功上岸京东物流,面试和复习思路分享
最近有很多小伙伴在后台私信我说,马上金九银十了,现在准备跳槽涨薪的同学越来越多了,想要一些速成的面试题和面试技巧,特地今天马老师为大家整理了这三套阿里巴巴2022年全年Java岗面试题总结+一线互联网大厂Java岗面经+一线互联网大厂Java岗面试题总结!
|
6月前
|
消息中间件 缓存 架构师
复习这份美团架构师的Java核心面试宝典,我四面阿里拿下offer
怎样才能拿到大厂的offer,没有掌握绝对的技术,那么就要不断的学习 他是如何拿下阿里等大厂的offer的呢,今天分享他的秘密武器,美团资深架构师整理的Java核心知识点,面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。
|
6月前
|
存储 缓存 移动开发
【面试题】2023-04,05面试集合,搞钱要紧 【抓紧面试】
【面试题】2023-04,05面试集合,搞钱要紧 【抓紧面试】
|
11月前
|
NoSQL 关系型数据库 MySQL
30K成功入职京东:拿到京东offer经验分享「面试经历+面试真题」
前言 ​目前很多大型互联网公司都采用线上面试的方法来挑选人才,也有很多幸运的小伙伴也是拿到大厂的offer,今天给大家分享的是我一位幸运拿到京东offer的朋友的面试经历,上周末,我也闲来无事,问到了我朋友京东面试的一些真题,以及我整理的一些真题分享给大家。
206 0
|
人工智能 算法 Java
拼多多2019春招编程题答案
拼多多2019春招编程题答案
|
缓存 算法 架构师
2023年秋招成功斩获offer秘籍:九大核心知识+1000道大厂面试真题
前言 如何在金九银十成功斩获Offer!BATJ大厂面经(成功关键:吃透九大核心知识+狂刷大厂面试真题) 第一轮:团队面试 第一轮基本上是你的团队成员面试你,是和你同级或者高你一个P的师兄来面你,我的话基本没问什么特别的,主要还是讲自己简历上的做的项目,这里需要你很熟悉自己的项目才行。 我个人觉得这里你要把项目里你的角色做了什么没做什么讲清楚,然后最好能把自己做的那部分重点展开来讲,然后面试官会从你讲的内容里挑一些具体来问你,这部分就因人而异了,知道的说不知道的别瞎说。 一些什么TCP/UDP啊、网络模型啊之类的基础知识。我是觉得这一面只要你项目靠谱、不吹牛逼、底子扎实,过一面应该都
|
Java
阿里淘系 七面 0经验拿下offer 只因面试前死磕了Java核心面试笔记
前几天一位粉丝朋友反馈,在九月份参加了阿里(淘系)面试,经过和面试官激励的七次博弈顺利拿下offer!
90 0
|
缓存 JavaScript 前端开发
头条秋招面试题以及答案
头条秋招面试题以及答案
96 0
|
设计模式 前端开发 算法
面经分享:美团面试也太难了!4面美团终成Offer
这篇文章分享我一个学弟的美团实习面试经历,万万没想到现在大厂实习面试也这么难,下面是他的面经,各位读者老哥可以参考浏览。 美团我是在拉勾网上投的简历,之前也投过一次,简历都没通过删选,后来让学姐帮我改了一下简历,重新投另一个部门,获得了面试机会。10月23日中午HR打电话过来预约了下午4点半面试,说会在线写代码,让我准备好网络环境。结果5点半还没打电话过来,被放鸽子。与hr重新沟通过后,确定下周一下午再面,可是跟hr沟通预约这一套貌似在美团并没有什么用。
下一篇
无影云桌面