京东笔试

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 北京
你好,请问京东笔试是只有编程吗?
1 回复 分享
发布于 2022-09-30 17:35 陕西
第二题dp为啥也超时50%……
1 回复 分享
发布于 2022-09-03 21:51 北京
大佬可以讲一下第三题思路吗
点赞 回复 分享
发布于 2022-09-04 11:01 湖南
第三题解法tql,把多对括号拆分,只看每一对括号,计算括号左右两边个数的乘积
点赞 回复 分享
发布于 2022-09-03 23:02 广东
第三题暴力算就是只有22%
点赞 回复 分享
发布于 2022-09-03 21:52 陕西
第二题这么写会超时的,因为有大量的重复递归。亲测
点赞 回复 分享
发布于 2022-09-03 21:49 湖北
你好,请问能贴一下第三题的题目哇?
点赞 回复 分享
发布于 2022-09-03 21:37 重庆

相关推荐

我:“加班需要有加班工资。”&nbsp;hr:“为什么?”&nbsp;哈哈哈哈哈哈哈离大谱
juntenor:你确实太理想化了,对社会不了解呀。这个和HR没有关系,这是国内特色,不然怎么还会有外包就这种逆天的存在呢。
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
下个早班:秒挂就是不缺人
点赞 评论 收藏
分享
评论
12
12
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务