京东笔试

1. 求非最大数字的个数

2. x可以拆成x-1,1 或 a,b (a*b=x) ; 将数组中每个数字全拆成1的最少次数 (考试时糊里糊涂的,最后没写完,考完以后用递归写了,不知道会不会超时)

import java.security.Principal;
import java.util.*;
public class Main {
    public static int getValue(int i){
        // 判断i最少多少次
        if(i==1){
            return 0;
        }
        int minValue = i-1;
        for(int j=2;j<=i/2;j++){
            if(i%j==0){
                if(minValue > getValue(j)+getValue(i/j)){
                    minValue  = getValue(j)+getValue(i/j)+1;
                }
            }
        }
        return minValue;

    } 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(); 
        int res = 0;
        List list = new LinkedList();
        for(int i = 0; i < n; i++){
            list.add(sc.nextInt()); 
        } 
        // 找到最小i+j,使得i*j = m 
        for(int i=0;i<n;i++){
            res += getValue(list.get(i));
        }
        System.out.println(res);
    }
}

3. 括号字符串所有子串的权值和(合法括号的个数*2),只过了22%,不知道为啥,超时?

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int n = s.length();
        int res = 0;
        // 长度为1的子串没有合法的,从2开始
        for(int i=0;i<n;i++){
            int flag = 0;
            int now = 0; // 现在权值
            for(int j=i;j<n;j++){
                char ch = s.charAt(j);
                if(ch=='('){
                    flag++;
                }
                else if(flag >= 1 && ch==')'){
                    now += 2;
                    flag--;
                }
                res += now;
            }
        }
        System.out.println(res);
    }
}

看了大佬的写法,tql,更新一下子

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

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int n = s.length();
        int res = 0;
        Stack<Integer> stack = new Stack<Integer>();
        // 考察每对括号对res的贡献
        for(int i=0;i<n;i++){
            char ch = s.charAt(i);
            if(ch=='('){
                stack.add(i);
            }
            else{
                res = res + 2*(stack.pop()+1)*(n-i);
            }
        }
        System.out.println(res);
    }
}
全部评论
第二题判断的时候最大到sqrt(n)就能全过了
2 回复 分享
发布于 2022-09-03 23:00 北京
第二题dp为啥也超时50%……
1 回复 分享
发布于 2022-09-03 21:51 北京
你好,请问京东笔试是只有编程吗?
1 回复 分享
发布于 2022-09-30 17:35 陕西
你好,请问能贴一下第三题的题目哇?
点赞 回复 分享
发布于 2022-09-03 21:37 重庆
第二题这么写会超时的,因为有大量的重复递归。亲测
点赞 回复 分享
发布于 2022-09-03 21:49 湖北
第三题暴力算就是只有22%
点赞 回复 分享
发布于 2022-09-03 21:52 陕西
第三题解法tql,把多对括号拆分,只看每一对括号,计算括号左右两边个数的乘积
点赞 回复 分享
发布于 2022-09-03 23:02 广东
大佬可以讲一下第三题思路吗
点赞 回复 分享
发布于 2022-09-04 11:01 湖南

相关推荐

10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
12 12 评论
分享
牛客网
牛客企业服务