10.9 奇安信笔试

第一题 打家劫舍 力扣链接

class Solution {
    //打家劫舍的变种问题分析理解
    public int rob(int[] nums) {
        //数组的快速复制的api
        if(nums.length == 0 )return 0;
        if(nums.length == 1 )return nums[0];
	    //开头与结尾不能同时取,分成[0,倒数第二位]:包含第一位,可以不取  [1,最后一位]:包含最后一位,可以不取
        int m = robhelp(Arrays.copyOfRange(nums,0,nums.length-1));
        int n = robhelp(Arrays.copyOfRange(nums,1,nums.length));
        return Math.max(m,n);
    }

     //对于动态规划算法的复习分析
    public int robhelp(int[] nums) {
        int m = nums.length;
        //dp[i] 是当前能偷到的max
        int[] dp = new int[m+1];
        dp[1] = nums[0];
        for(int i =2;i<=m;i++){
		    //当前位置偷:dp[i-2]+nums[i-1]  不偷:dp[i-1]
            dp[i] = Math.max(dp[i-2]+nums[i-1],dp[i-1]);
        }
        return dp[m];
    }
}

第二题:前缀和考察(可以暴力写)

题目大概:数组元素只有1,0, 0代表消费一个金币,1代表获取一个金币,确保这个数组遍历过后,整个过程是合法(金额不为负数)

public class Main {
//    前缀和对应的考察分析

    public boolean CheckGameResource (int[] sequence) {
        // write code here
        int res = 0;
        int n = sequence.length;
        int ans = 0;
        int[] a = new int[n];
        int bns = 0;
        int[] b = new int[n];
        for (int i = 0; i < n; i++) {
            if (sequence[i] == 1) {
                ans++;
            }else {
                bns++;
            }
            a[i]=ans;
            b[i]=bns;
            if (a[i]<b[i]) {
                return false;
             }
        }
        if(a[n-1]!=b[n-1]) {
            return false;
        }
        return true;
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-12 10:56
汇川联合动力 过程工艺开发工程师 20*15 硕士985
点赞 评论 收藏
分享
11-09 13:08
已编辑
上海交通大学 C++
商飞 电气设计岗 20w税前总包,包含餐补房补等各种补贴以及绩效奖金
点赞 评论 收藏
分享
盒马一面11人在聊 查看11道真题和解析
点赞 评论 收藏
分享
小公司 JAVA 12*12
点赞 评论 收藏
分享
1 3 评论
分享
牛客网
牛客企业服务