关键在于理解算法的思想,从你的代码来看你的思路并不是很清楚
成都创新互联公司是一家专业提供绵阳企业网站建设,专注与成都网站建设、网站制作、H5建站、小程序制作等业务。10年已为绵阳众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
既然贪心,首先就想到贪心的本质,再联系题目的要求
贪心是意思是每次的结果都在当前是最优解
作为本题来看,就是每次删除一个数之后都是比删除其它数更小的
那么什么情况会发生呢,这就是思考的要点了,这里就可以模拟几组数来进行删除实验
发现一定会是前面的数比后面的数大的时候删除它就能得到一个最优解
那么接下来代码就会很好写了
其实最重要的不是代码,而是如何从题目变成一个正确的算法,也即思考的过程
面试是每个普通程序员面前的一座大山,给了大家无尽的苦恼和困惑。
程序员面试很难吗?难!正常的,要经过两轮技术面试以及一轮经理面试,也有不少顶尖公司甚至需要三到五轮的技术面试。
几轮面试下来,能熬到最后,这绝对是真正意义上的“过五关斩六将”了。
很多优秀的程序员业务能力很过硬,但都因为在面试的时候发挥失常,从而屡屡与大厂失之交臂。
所以,每一个面试成功者,都算是勇士。
要给自己点个赞!那么面试时,我们究竟需要注意什么呢?今天,北大青鸟就教给大家几个面试成功的技巧。
1、首先,要确保你理解了面试官的问题。
许多问题都是故意措辞模糊或者模棱两可,这个时候你可以请面试官把问题说清楚,从而确保你真正回答面试官的问题。
你的提问同时还有一个好处,就是它能给你自己一些时间,让你的脑子转起来。
2、用一到两个例子来确定问题的限制条件和要求(在现场面试时在白板上完成这个过程,在电话面试时在笔记本上完成)。
尝试用中等规模的例子,以便覆盖到一些特殊情况。
如果你能想到可能相关的表格,就把它画出来。
事实上,把你想到的任何东西都写下来是会有帮助的,因为它能为你提供一个视觉锚点,从而让你在走不通时或者思考过程中随时返回某一个点。
3、把话说清楚,这可能是最重要的一步。
要试着让面试尽可能有更多的互动,面试官不知道你在想什么,而让他们参与到你的思考过程里,会让她给你一些有用的提示,防止你偏向错误的方向。
你的目标就是要先和面试官确证你的答案,然后再去写代码,而且你考虑答案越清晰、越高效,你得到的即时反馈也就越好。
4、通过应用以下技巧来找到答案回想一下你遇到的类似问题,再想想它们是如何被解决的,尝试各种不同的算法(分治算法、贪心算法、递归、排序,等等),把问题分解成更小的、可处理的小问题(这样你就能得到相应部分的分数),最后再通览一遍你列出的数据结构,因为有时候,只要想到了正确的数据结构,就能给出正确的答案。
5、当你向面试官问清楚了问题、并向她解释了你的答案之后,就可以开始写代码了。
在共享文档里写代码的时候,你可以复制粘贴、写评论,而且能回过头来完成骨架算法和功能。
但在白板上写代码就不一样了,它需要你的头脑很清醒,而且需要你具备管理白板空间的技能。
import java.util.Arrays;
import java.util.Comparator;
//装箱问题,贪心算法
public class Enchase {
public void test1() {
Integer[] boxs={34,6,40,2,23,12,12};
贪心算法找零就是现实中从最大面额开始找的思路。不代表是最优解,只是算法之一。
由于面额输入顺序不定,我先对输入的面额进行降序排序。
下面代码:
#include stdio.h
#include malloc.h
int main()
{
int i,j,m,n,*ns=NULL,*cn=NULL,sum=0;
printf("请输入总金额m及零钱种类n:"),scanf("%d",m),scanf("%d",n);
printf("请分别输入%d种零钱的面额:\n",n);
if(!(ns=(int *)malloc(sizeof(int)*n))) return 1;
if(!(cn=(int *)malloc(sizeof(int)*n))) return 1;
for(i=0;in;i++) scanf("%d",ns[i]);
//------------考虑输入面额顺序不定,先对面额进行降序排列(如按照降序输入,该段可删除)
for(i=0;in;i++)
for(j=i+1;jn;j++)
if(ns[j]ns[i]) ns[j]^=ns[i],ns[i]^=ns[j],ns[j]^=ns[i];
//-------------------------------------------------------------------
for(i=0;in;i++)//贪心算法,从最大面额开始
if(m=ns[i])
cn[i]=m/ns[i],m=m%ns[i],sum+=cn[i],printf("%d元%d张 ",ns[i],cn[i]);
printf("\n最少使用零钱%d张\n",sum);
return 0;
}