2019腾讯春招暑期实习提前批编程题_2019互联网企业暑期实习-程序员宅基地

技术标签: 2019腾讯春招  趣味编程  

错过了腾讯的春招编程题(在牛客笔试前已经电话面所以就没参加,有自己做C++的笔试,对C++不熟,感觉已经凉了),但是朋友做了便截图下来然后自己练习一下,给我的感觉就是,会做的就很快写完,不会的基本没有什么思路,总之很快写完了三道题,但是有两道是不会的。下面按题目给出我的代码,有错的恳请指正。

1、

不要看到这个就以为是背包问题,这个是从大到小的,也就是说什么面值的货币都有,所以就不存在比如货币是{1,6,7},而输入30的情况下,如果按下面的算法就出错了,按下面的算法,此时应该得到4*7+2*1=30,要6个货币,但假如是6*5=30只要5个货币。但题目给的是n种货币,所以假如先4*7+1*2=30,也是只要5个货币,所以本题很简单。。。

public static void lessCoins(){
        String [] lines = scanner.nextLine().split(" ");
        int n = Integer.parseInt(lines[0]),m = Integer.parseInt(lines[1]);
        int count = 0,temp = 0;

        while (m>0){
            temp = n;
            while (temp>m){
                temp--;
            }
            m-=temp;
            count++;
        }
        System.out.println(count);
    }

如果按照前面说的,那要简单动态规划了,动态规划基本就是两个步骤,定义状态,然后递推转移方程,如果想要详细了解动态规划,那么可以参考别的文章。

    public static int getLessCoinsCount(int []coins,int amount){
        int []dp = new int[amount+1];
        for(int i=1;i<=amount;i++){
            int min = Integer.MAX_VALUE;
            for(int j=0;j<coins.length;j++)
                if(coins[j]<=i)min = Math.min(min,dp[i - coins[j]]+1);
            dp[i] = min == Integer.MAX_VALUE?0:min;
        }
        return dp[amount]>amount?-1:dp[amount];
    }

2、

 

这个其实就是累加的意思,只是要对加数做个求余判断。

public static int getSum(int start,int end){
        int sum = 0;
        for (int i = start;i<=end;i++){
            if(i%2==0) sum += i;
            else sum -= i;
        }
        return sum;
    }
        int n  = Integer.parseInt(scanner.nextLine());
        int [][]res = new int[n][2];
        int []r = new int[n];
        String [] strs = null;
        for (int i = 0;i<n;i++){
            strs = scanner.nextLine().split(" ");
            res[i][0] = Integer.parseInt(strs[0]);
            res[i][1] = Integer.parseInt(strs[1]);
        }
        for (int i = 0;i<n;i++){
            r[i] = getSum(res[i][0],res[i][1]);
            System.out.println(r[i]);
        }

3、

这题可能同学想到的,就是先枚举所有排列,再和原来的数组做比较,得到结果相等时计数加1,当超过1e9+7时对计数取1e9+7的余数,相信大部分人都这么想,但是,这肯定是不可取的,17的阶乘都超过了int的最大范围,何况这里有最多2000个数,那肯定是不可计算的。想一下,假设在相等的情况,有s个1,其他均为0,那么就有Cn的s种,而其他的还有2的(n-s)次方,因为0、1、2,只能有2种可能是能赢的,而这些数也是有n-s个数,于是得到公式。所以代码就很简单了:

public static int calC(int n,int s){
        int count = 1, e = n - s;
        for (int i = s + 1;i<=n;i++){
            count *=i;
            if(count>1000000007)count%=1000000007;
        }
        while (e>0){
            count *= 2;
            if(count>1000000007)count%=1000000007;
            e --;
        }
        return count;
    }

因为我没有提交过题目,也不知道对不对,但是举几个例子都是没有问题的,在s,n的范围内也是算得很快,如果不对的请指正。

4、

看到这题,是不是感觉跟计算最长子串的思想有点那么相似,如果你要这么想,就往复杂里面想了。相信学过计算机网络的同学应该都听说过滑动窗口,滑动窗口应该就是在传送报文时可以动态更新的长度,窗口长度受对方主机反馈的影响。我觉得这个意思很像啊,说下我的思路,因为要求所有颜色要命中,于是用一个list去装这个序列,这个序列肯定都包含所有颜色但也可能有重复的颜色,因为这个滑动窗口就是记录原来数组中连续最少的枪数,此外我们还要判断什么这个list满足包含所有颜色,当包含所有颜色时,就得到一个序列,这个满足条件的序列长度就被保存下来到一个res_list中,到最后对res_list排序,取最前面的数就是最小的长度。那么关键问题就是,滑动窗口怎么设计,其实很简单,因为滑动窗口要满足包含所有颜色,暂且用一个队列来保存这个滑动窗口,只有当要入队元素和队首元素一样时,我们才对队列操作,即队首元素出队,然后再入队,这就能保证当前队列不会有多余的步长,当然,你非要说中间有相同的数,那我只能说没有影响。当得到一个可用序列后,滑动窗口要更新的,就是删除队首,当队首元素后有队首元素时,删除队首元素直到没有。于是代码就出来了:

public static int lessShotCounts(int a[],int m){
        ArrayList<Integer> res_list = new ArrayList<>();//所有满足条件的窗口长度
        ArrayList<Integer> list = new ArrayList<>();//得到一条路线的标志
        LinkedList<Integer> t_list = new LinkedList<>();//滑动窗口的数组
        for(int i = 0;i<a.length;i++){
            if(!list.contains(a[i])){
                list.add(a[i]);
                t_list.add(a[i]);
            }
            else{
                if(t_list.get(0) == a[i]){
                    t_list.remove((Object)a[i]);
                }
                t_list.add(a[i]);
            }
            boolean flag = false;
            if(list.contains(0) && list.size() == m + 1) flag = true;
            if(!list.contains(0) && list.size() == m ) flag = true;
            if(flag){
                System.out.println(Arrays.toString(t_list.toArray()));
                res_list.add(t_list.size());
                if(t_list.get(0)!=null){
                    int temp = t_list.get(0);
                    t_list.remove((Object)temp);
                    list.remove((Object)temp);
                    if(t_list.get(0)!=null){
                        temp = t_list.get(0);
                        while (t_list.lastIndexOf(temp) !=0 && t_list.get(0)!=null){
                            t_list.remove((Object)temp);
                            temp = t_list.get(0);
                        }
                    }
                }
            }
        }
        if(res_list.size()==0)return -1;
        else{
            Collections.sort(res_list);
            return res_list.get(0);
        }
    }

结果:

5、

这个题目我暂时还没有头绪,等我想到了再分享,或者有会的同学可以分享给我,十分感谢。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42363997/article/details/88600097

智能推荐

XCTF-Misc1 a_good_idea Ditf_ihdr隐写-程序员宅基地

文章浏览阅读400次,点赞7次,收藏8次。附件是一张图片。_ihdr隐写

Matlab专题四_matlab绘制花瓶-程序员宅基地

文章浏览阅读1.5k次,点赞5次,收藏12次。一、二维曲线1、plot函数(1)plot函数绘制二维折线( plot(x,y)包含两个向量 x,y )>> x = [2.5,3.5,4,5];>> y = [1.5,2.0,1,1.5];>> plot(x,y)%运行结果如下(2)最简单的plot函数调用格式( plot(x) 只包含一个向量x,此时二维图形横坐标为向量x的下标,纵坐标为向量内的值。 )>> x = [2,1,3,0];>&..._matlab绘制花瓶

SpringCloud微服务学习(三)——Hystrix、Feign_feign使用hystrix和springcloudgateway使用hystrix的作用分别是什么-程序员宅基地

文章浏览阅读219次,点赞2次,收藏2次。文章目录四、Hytrix1.简述四、Hytrix1.简述_feign使用hystrix和springcloudgateway使用hystrix的作用分别是什么

最长递增子数列_自然增长数列-程序员宅基地

文章浏览阅读462次。300. Longest Increasing SubsequenceGiven an unsorted array of integers, find the length of longest increasing subsequence.For example,Given [10, 9, 2, 5, 3, 7, 101, 18],The longest incre_自然增长数列

MAC操作系统下得mamp pro添加扩展_mac mamp imagick 命令行-程序员宅基地

文章浏览阅读1.8k次。mamp pro管理工具可以很好的管理PHP及apache, 在这个工具下添加PHP扩展的方法如下brew tap kyslik/phpbrew install php70-pcntl brew reinstall -fs homebrew/php/php70-xdebug1: brew install homebrew/php/php53-imagick ; 说明: bre..._mac mamp imagick 命令行

cmake(十八)Cmake的宏macro_macro cmake-程序员宅基地

文章浏览阅读3.5k次,点赞6次,收藏13次。一 基础知识1) cmake中的'函数'和'宏(macro)'区别2) cmake中的宏和'C语言'的宏的区别二 实践备注: 不细讲,主要是'区别'4-24- 19-04-08三 补充使用execute_process调用shell命令或脚本execute_process(COMMAND sh test.sh WORKING_DIRECTORY <test.sh所在目录>)注:在调用一个execute_process时可以'顺序..._macro cmake

随便推点

Charles对iPhone抓包配置_python charles iphone-程序员宅基地

文章浏览阅读2.3w次。Charles对iPhone抓包配置Charles版本4.2.5iPhone版本10.3.1 抓取iPhone网络请求设置第一步:Charles配置菜单:Proxy -&amp;gt; Proxy Settings... -&amp;gt; 勾选 Enable transparent HTTP proxying查找电脑连接wifi的Ip地址:iPhone的WiFi设置..._python charles iphone

linux下通过/sys/kernel/debug/gpio查看gpio状态_内核判断管脚电平-程序员宅基地

文章浏览阅读3.9k次。在使用GPIO的时候,有时候不知道GPIO的状态,也不知道在内核中GPIO是否申请成功。可以通过/sys/kernel/debug/gpio这个文件来查看。这个文件显示了申请成功的GPIO的输入输出状态和电平。参考GPIO - eLinux.orgGPIO Signals | GPIO Support | RidgeRun Developer配置内核打开debugfs支持Symbol: DEBUG_FS [=y] Prompt: Debug Filesystem _内核判断管脚电平

CSDN 周赛38期题解_csdn你不知道谁是小明,但是你知道小明的学号是18032。现在来了一些人,你打算挨个-程序员宅基地

文章浏览阅读486次。竟然榜上有名,奖励自己个糖葫芦_csdn你不知道谁是小明,但是你知道小明的学号是18032。现在来了一些人,你打算挨个

【Activiti学习之一】Activiti入门-程序员宅基地

文章浏览阅读406次。环境   JDK1.7   MySQL5.6   Tomcat7   Eclipse-Luna   activiti 6.0一、概念1、工作流(Workflow):是一系列相互衔接、自动进行的业务活动或任务。采用工作流软件,使用者只需在电脑上填写有关表单,会按照定义好的流程自动往下跑,下一级审批者将会收到相关资料,并可以根据需要修改、跟踪、管理、查询、统计、打印等,大大提高了效率。..._executing beforeinit() of class org.activiti.management.jmx.jmxconfigurator

java三大特性——多态_java语言多态特性-程序员宅基地

文章浏览阅读611次。虽然p1、p2都是Person类型,但是在代码执行期间,会根据引用对象判断具体如何执行(没有重写就执行父类中的方法,重写则执行子类中的方法),这就是动态绑定。但是这种方式不是可靠的,并不是所有Person类型的引用都是Student的,也有可能是Teacher等等。:是指在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。我们可以看到虽然我们new 的是子类,但我们实现的依然是父类的方法。向下转型,要和向上转型结合起来思考,后面的父类引用是向上转型产生的。_java语言多态特性

Chrome访问https显示ERR_CERT_INVALID无法跳过问题解决-程序员宅基地

文章浏览阅读4.5k次,点赞5次,收藏5次。macOS Chrome访问https页面显示ERR_CERT_INVALID,以往版本可以选择跳过,继续访问,但是新版本Chrome不允许继续,且提示:您的连接不是私密连接攻击者可能会试图从XX.XX.XX.XX窃取您的信息(例如:密码、通讯内容或信用卡信息)。了解详情NET::ERR_CERT_INVALID将您访问的部分网页的网址、有限的系统信息以及部分网页内容发送给 G..._err_cert_invalid