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;
    }
}

全部评论

相关推荐

头像
04-17 09:29
已编辑
湖南农业大学 后端
睡姿决定发型丫:本硕末9也是0offer,简历挂了挺多,只有淘天 美团 中兴给了面试机会,淘天二面挂,美团一面kpi面,中兴一面感觉也大概率kpi(虽然国企,但一面0技术纯聊天有点离谱吧)
点赞 评论 收藏
分享
在看数据的傻狍子很忙碌:学生思维好重,而心很急,自己想想真的能直接做有难度的东西吗?任何错误都是需要人担责的,你实习生可以跑路,你的同事领导呢
点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

更多
牛客网
牛客企业服务