京东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);
    }

}
目录
相关文章
|
Unix Linux
Touch命令使用指南:创建、更新和修改文件时间戳
Touch命令使用指南:创建、更新和修改文件时间戳
2121 0
|
8月前
|
数据采集 供应链 物联网
别再只会调用 API 了:一步步教你用 Python Fine-Tune 一个定制化大模型
别再只会调用 API 了:一步步教你用 Python Fine-Tune 一个定制化大模型
733 4
|
8月前
|
人工智能 自然语言处理 算法
《突破医疗 RAG 语义塌陷边界:基于 GEO 结构化对齐机制的生成式引擎优化实践》
本文提出基于GEO结构化对齐机制的医疗RAG优化方案,针对语义塌陷、实体错配与幻觉问题,构建知识图谱约束、加权嵌入与硬校验层,显著提升Recall@10(63.4%→84.7%)、实体对齐精度(0.71→0.89),降低幻觉率(18.2%→5.6%),推动医疗AI从“可回答”迈向“可解释、可追溯、可合规”的生成式基础设施升级。
435 3
|
Android开发 开发者
Android利用SVG实现动画效果
本文介绍了如何在Android中利用SVG实现动画效果。首先通过定义`pathData`参数(如M、L、Z等)绘制一个简单的三角形SVG图形,然后借助`objectAnimator`实现动态的线条绘制动画。文章详细讲解了从配置`build.gradle`支持VectorDrawable,到创建动画文件、关联SVG与动画,最后在Activity中启动动画的完整流程。此外,还提供了SVG绘制原理及工具推荐,帮助开发者更好地理解和应用SVG动画技术。
758 30
|
JSON 缓存 API
身份证二要素核验接口调用指南 —— Python 示例
本文介绍如何在 Python 中快速实现身份证二要素核验功能,适用于用户注册、金融风控等场景。通过阿里云市场提供的接口,可校验「姓名 + 身份证号」的一致性,并获取性别、生日、籍贯等信息。示例代码展示了从环境变量读取 APP_CODE、发送 GET 请求到解析 JSON 响应的完整流程。关键字段包括 code(1-一致,2-不一致,3-无记录)、msg 和 data。常见问题如 403 错误需检查 AppCode,超时则优化网络或设置重试机制。集成后可根据业务需求添加缓存、限流等功能提升性能。
1307 4
|
数据可视化 JavaScript 前端开发
股票账户模拟生成器,股票交割单生成器,证券持仓收益曲线图
完整的股票模拟系统包含账户管理、交易记录和可视化分析三大模块,使用纯JavaScript实现
|
存储 安全 API
亚马逊SP-API入门:海外电商接口调用与国内平台的差异化
亚马逊 SP-API 与国内电商 API 在技术架构、安全机制及开发流程上差异显著。本文对比京东、淘宝等平台,分析接口设计、地域适配、权限管理等核心差异,并结合实战经验提供开发建议,助力开发者高效接入 SP-API,实现全球电商业务拓展。
|
SQL 关系型数据库 Go
《增强你的PostgreSQL:最佳扩展和插件推荐》
《增强你的PostgreSQL:最佳扩展和插件推荐》
1865 0
|
网络协议
iperf3的常用命令样例
iperf3是一个用于测量网络带宽的工具,以下是一些常用的iperf3命令样例: 1. 在服务器模式下启动iperf3: ``` iperf3 -s ``` 2. 在客户端通过TCP连接测试带宽: ``` iperf3 -c <服务器IP地址> ``` 3. 在客户端通过UDP连接测试带宽: ``` iperf3 -c <服务器IP地址> -u ``` 4. 指定连接端口号: ``` iperf3 -c <服务器IP地址> -p <端口号> ``` 5. 设置测试时间: ``` iperf3 -c <
3426 0