商汤研发笔试 100-100-20-100

关于第三题,始终没有找到正确的计算姿势,有dalao指教一下么

1

package Interview2020.SenseTime._1;

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();
        String[] ss = s.split(" ");

        Stack<Integer> stack = new Stack<>();
        for(String t : ss){
            if(isCal(t)){
                int a2 = stack.pop();
                int a1 = stack.pop();
                if(t.equals("+")) stack.push(a1+a2);
                else if(t.equals("-")) stack.push(a1-a2);
                else if(t.equals("*")) stack.push(a1*a2);
                else if(t.equals("/")) stack.push(a1/a2);
            }
            else{
                stack.push(Integer.valueOf(t));
            }
        }

        System.out.println(stack.peek());
    }

    private static boolean isCal(String s){
        if(s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/"))
            return true;
        return false;
    }
}

2

package Interview2020.SenseTime._2;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int[] nums = new int[N];
        for(int i=0; i < N; i++){
            nums[i] = sc.nextInt();
        }

        int max = 0;
        for(int i=1; i < N-1; i++){
            int left = i;
            int right = i;
            while(left-1 >=0 && nums[left] > nums[left-1]) left--;
            while(right+1 < N && nums[right] > nums[right+1]) right++;
            if(right - left + 1 >= 3 && left < i && right > i)
                max = Math.max(right-left+1,max);
        }

        System.out.println(max);
    }
}

3

package Interview2020.SenseTime._3;

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

public class Main {
    private static int[] dp;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int year = sc.nextInt();
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();
        int ini = sc.nextInt();

        //尝试暴力计算
        dp = new int[year+1];
        dp[0] = ini;
        for(int i=1; i <= year; i++){
            int part1 = (a * helper(i-1))%1000000007;
            int part2 = (b * helper(i-2))%1000000007;
            int part3 = (c * helper(i-3))%1000000007;
            int part40 = (2*i)%1000000007;
            int part41 = (part40*i)%1000000007;
            int part42 = (part41-i)%1000000007;
            int part43 = (part42+32767)%1000000007;
            int part4 = part43;

            int p1 = (part1+part2)%1000000007;
            int p2 = (p1+part3)%1000000007;
            int p3 = (p2+part4)%1000000007;
            dp[i] = p3;
        }

        System.out.println(dp[year]);
    }

    private static int helper(int i){
        if(i < 0)
            return 0;
        return dp[i];
    }
}

4

package Interview2020.SenseTime._4;

import java.util.*;

public class Main {
    private static int res = 0;
    private static Set<String> set = new HashSet<>();
    private static Set<Integer> sqrt = new HashSet<>();

    private static List<List<Integer>> used = new ArrayList<>();
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] nums = new int[n];
        for(int i=0; i < n; i++){
            nums[i] = sc.nextInt();
        }

        if(n == 1){
            System.out.println(res);
            return;
        }
        calculate();
        permutation(nums,0);
        System.out.println(res);
    }

    private static void calculate(){
        for(int i=0; i <= 100; i++){
            sqrt.add(i*i);
        }
    }

    private static boolean isValid(int[] nums){
        for(int i=0; i < nums.length-1; i++){
            if(!sqrt.contains(nums[i]+nums[i+1]))
                return false;
        }
        return true;
    }

    private static void permutation(int[] nums,int beginIndex){
        if(beginIndex == nums.length){
            String s = "";
            for(int i=0; i < nums.length; i++){
                s += String.valueOf(nums[i]);
            }
            if(!set.contains(s)){
                set.add(s);
                if(isValid(nums)){
                    res++;
                }
            }

//            boolean isSame = false;
//            for(int i=0; i < used.size(); i++){
//                List<Integer> t = used.get(i);
//                isSame = true;
//                for(int j=0; j < t.size(); j++){
//                    if(t.get(j) != nums[j]){
//                        isSame = false;
//                        break;
//                    }
//                }
//                if(isSame) break;
//            }
//            if(!isSame){
//                if(isValid(nums)) res++;
//            }
//            List<Integer> tt = new ArrayList<>();
//            for(int i=0; i < nums.length; i++) tt.add(nums[i]);
//            used.add(tt);
        }

        for(int curIndex=beginIndex; curIndex < nums.length; curIndex++){
            swap(nums,curIndex,beginIndex);
            permutation(nums,beginIndex+1);
            swap(nums,curIndex,beginIndex);
        }

    }

    private static void swap(int[] nums,int i, int j){
        int t = nums[i];
        nums[i] = nums[j];
        nums[j] = t;
    }

}
#笔试题目##商汤科技#
全部评论
为什么我第一题一直26.7
点赞 回复
分享
发布于 2019-08-19 21:13
第三题我用long也还是只有20,第四题直接输出个0就有50了😂
点赞 回复
分享
发布于 2019-08-19 21:23
饿了么
校招火热招聘中
官网直投
第三题的学姐活的有点长,好像是10^18,所以输入要用nextLong吧
点赞 回复
分享
发布于 2019-08-19 21:27
矩阵快速幂
点赞 回复
分享
发布于 2019-08-19 21:11
大佬
点赞 回复
分享
发布于 2019-08-19 21:11
老哥ac多少。
点赞 回复
分享
发布于 2019-08-19 21:13
大神,第三题说的数值大的时候取模实是什么意思呀?
点赞 回复
分享
发布于 2019-08-19 21:17
第三题一样,我再看了下题,后面n的范围超出int的范围了,所以要用long或者biginteger类型来存储
点赞 回复
分享
发布于 2019-08-19 21:20
最后一题dfs剪枝一直66.67,不知道哪里出问题
点赞 回复
分享
发布于 2019-08-19 21:29
第三题  https://www.nowcoder.com/discuss/227729
点赞 回复
分享
发布于 2019-08-19 21:45
大佬什么岗位呢,感觉题目都不一样
点赞 回复
分享
发布于 2019-08-19 21:50
为什么我没输入输出就过不了?
点赞 回复
分享
发布于 2019-08-19 22:13

相关推荐

点赞 18 评论
分享
牛客网
牛客企业服务