题解 | #牛牛的数组匹配#

牛牛的数组匹配

https://www.nowcoder.com/practice/3d3406f4a7eb4346b025cc592be5b875

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
       // 注意 while 处理多个 case
            int a = in.nextInt();
            int b = in.nextInt();
            int total = 0;
            while((a--)>0)total+=in.nextInt();
            int[] arr = new int[b];
            for(int i=0;i<b;i++)arr[i]=in.nextInt();
            int minStart=0,minDelta=total;

            int[][] dp = new int[b][2];

            for(int i=0;i<b;i++){
                int sum = arr[i];
                //dp[i][0] = total-arr[i];
                
                if(i==b-1||total-sum<=0)dp[i][1]=i;
                else{
                    for(int j=i+1;j<b;j++){
                        if(sum+arr[j]<total){
                            sum+=arr[j];
                            if(j==b-1)dp[i][1] = j;
                        else
                            continue;

                        }else if(sum+arr[j]==total){
                            sum+=arr[j];
                            dp[i][1] = j;
                            break;

                        }else{//dp[i][0]+arr[j]>total
                            int m =sum+arr[j]-total;
                            int n = total-sum;
                            if(m>=n){
                                dp[i][1] = j-1;
                                break;
                            }else{
                                sum+=arr[j];
                                dp[i][1] = j;
                                break;
                            }

                        }
                    }
                }

                dp[i][0] = Math.abs(total-sum);

                if(dp[i][0]<minDelta){
                    minDelta = dp[i][0];
                    minStart = i;
                }
                
               
            }

            for(int i = minStart;i<=dp[minStart][1];i++)System.out.print(arr[i]+" ");
           
        
    }
}

全部评论

相关推荐

01-12 09:24
门头沟学院 Java
点赞 评论 收藏
分享
2本硕,在这一个下午真的绷不住了,浪费了太多时间,现在的技术栈还停在C语言和stm32上,找嵌入式的实习面试被拷打,找杭州的一个也找不到,真的心里难受,linux没学过,研二了开始慌了。
一条淡水魚:嵌入式这行的面试我认为实际项目比较重要,技术栈简单的提一嘴就行,面试官在乎的关键点在于你用了这些技术做了哪些工作解决了什么问题,而不是停留在离散的那些个技术栈上,那除了教课没有意义,好比你提到的c语言和32,你用32做过哪些具体的项目?接触过什么外设?使用过哪些公司的SDK?有没有实际产品落地?以及各种只有进入真正的生产环节当中才会积累到的经验......主动去和面试官讨论这些实际的问题,甚至还能就某个具体参数的合理性与他去简单探讨一下,只要技术栈对口,基本上就稳啦~(另外linux和RTOS是嵌入式的标配哦,选一个方向走下去吧)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务