京东笔试

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 湖南

相关推荐

点赞 评论 收藏
分享
object3:开始给部分🌸孝子上人生第一课了
点赞 评论 收藏
分享
评论
12
12
分享
牛客网
牛客企业服务