网易笔试2021/8/21

1.给你一个数组nums,任意选取两个数字,两个数字之和>=m.
两层for循环就可以了
2.字符串处理:
pre保存上一个字符串
直接利用pre更新当前字符串cur就可以了。

3.小朋友分纸张
看力扣分发糖果135题,这个题比135题多了小朋友成圈首尾相连。
小朋友围成一个圈,年龄大的小朋友要比相邻的年龄下的小朋友的纸张上多(年龄大于,而不包含等于),最多一百个小朋友,最少需要多少张纸张。
正着一轮,反着一轮

public class tangguo135 {
    public int candy(int[] ratings) {
        int n = ratings.length;
        if(n==1){
            return 1;
        }
        //从左到右,小朋友要比左边小朋友的纸张多(如果当前小朋友的年龄更大的话)
        int[] dp = new int[n];//第i位小朋友的纸张数
        dp[0]=1;
        for(int i=1;i<n;i++){
            if(ratings[i]>ratings[i-1]){
                dp[i]=dp[i-1]+1;
            }else{
                dp[i]=1;
            }
        }
        //从右到左,小朋友要比右边小朋友的纸张多(如果当前小朋友的年龄更大的话)
        int[] right = new int[n];
        //如果最后一个孩子的年龄大于第一个孩子的年龄,那么right[n-1]=2;
        if(ratings[n-1]>ratings[0]){
            right[n-1]=2;
        }
        right[n-1]=1;
        for(int i=n-2;i>=0;i--){
            if(ratings[i]>ratings[i+1]){
                right[i]=right[i+1]+1;
            }else{
                right[i]=1;
            }
        }
        int res=0;
        for(int i=0;i<n;i++){
            res+=Math.max(dp[i],right[i]);
        }
        return res;
    }
    public static void main(String[] args) {

    }
}


4.航海问题
有水路、陆地、障碍物,三种,水路用0表示,陆地用1表示,障碍物用2表示,水路花销2,陆地花销1,障碍物不可行。
问从起点(0,0)到终点(m-1,n-1),问最小花销。
用dp,dp[i][j]:位置i,j的最小开销。

public class wang04 {
    //dp[i][j]:位置ij的最小开销
    public int minSailCost (int[][] input) {
        // write code here
        int maxvalue = 10000;//障碍物节点的开销,这样更新的时候就不会选择从障碍物过了
        int m=input.length,n=input[0].length;
        int[][] dp = new int[m][n];
        dp[0][0]=0;//起点不算开销
        for(int j=1;j<n;j++){//第一行只有一种走法
            if(input[0][j]==2){//障碍物
                dp[0][j] = maxvalue;
            }else if(input[0][j]==1){//陆地开销为1
                dp[0][j] = dp[0][j-1]+1;
            }else if(input[0][j]==0){//水路开销为2
                dp[0][j] = dp[0][j-1]+2;
            }
        }
        //第一列的开销
        for(int i=1;i<m;i++) {
            if(input[i][0]==2){//障碍物
                dp[i][0] = maxvalue;
            }else if(input[i][0]==1){//陆地,开销为1
                dp[i][0] = dp[i-1][0]+1;
            }else if(input[i][0]==0){//水路,开销为2
                dp[i][0] = dp[i-1][0]+2;
            }
        }
        //dp[i][j]=min(dp[i][j-1],dp[i-1][j])+cost[i][j];
        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){//第一行只有一种走法
                if(input[i][j]==2){
                    dp[i][j] = maxvalue;
                }else if(input[i][j]==1){//陆地
                    dp[i][j] = Math.min(dp[i][j-1],dp[i-1][j])+1;
                }else if(input[i][j]==0){//水路
                    dp[i][j] = Math.min(dp[i][j-1],dp[i-1][j])+2;
                }
            }
        }
        return dp[m-1][n-1];
    }

    public static void main(String[] args) {
        wang04 ww = new wang04();
        ww.minSailCost(new int[][]{{1,1,1,1,0},{0,1,0,1,0},{1,1,2,1,1},{0,2,0,0,1}});
    }
}

问答题
列举三种常见的软件开发过程模型,简要叙述各模型的特点
https://blog.youkuaiyun.com/qq_42428269/article/details/100169515
原型法,
快速原型法,
瀑布模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值