加拿大华人论坛 温哥华 Vancouver星期天做个编程题吧



在加拿大


理解不了这个编程答案,请坛子里的高手帮我理解一下这个答案,我不解为什么这样就筛除了i位置上的元素? 谢谢!题目Given an integers array A.Define B = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], calculate B WITHOUT divide operation.Out put BExampleExample 1代码:Input: A = [1, 2, 3]Output: [6, 3, 2]Explanation:B[0] = A[1] * A[2] = 6; B[1] = A[0] * A[2] = 3; B[2] = A[0] * A[1] = 2Example 2代码:Input: A = [2, 4, 6]Output: [24, 12, 8]答案Java: public List<Long> productExcludeItself(List<Integer> nums) { List<Long> rst = new ArrayList<>(); if(nums == null || nums.size() == 0) { return rst; } long tmp = 1; for(int i = 0; i < nums.size(); i ++){ rst.add(tmp); tmp *= nums.get(i); } tmp = 1; for(int j = nums.size() -1; j >= 0; j --){ rst.set(j, rst.get(j) * tmp); tmp *= nums.get(j); } return rst; }

评论
对于每一个位置,比如1,2,3,4,5中的3第一个for循环计算了从index 0到该位置之前的所有数字乘积,也就是1,2第二个for循环在上面的基础上又继续乘以从index 末尾位置到该位置之后的所有数字,也就是5,4前后一堵,就剩下本身位置上的数字(3)没有乘。

评论
你都如何回忆我 带着笑或是很沉默 这些年来 有没有人让你不寂寞 - 不再年轻的毛利小五郎~对于每一个位置,比如1,2,3,4,5中的3第一个for循环计算了从index 0到该位置之前的所有数字乘积,也就是1,2第二个for循环在上面的基础上又继续乘以从index 末尾位置到该位置之后的所有数字,也就是5,4前后一堵,就剩下本身位置上的数字(3)没有乘。点击展开...谢谢!你中间两句说得没错,可我就是不理解怎么到3就停止了?不是到nums.size()吗?就下面这段不懂Java: long tmp = 1; for(int i = 0; i < nums.size(); i ++){ rst.add(tmp); tmp *= nums.get(i); } tmp = 1; for(int j = nums.size() -1; j >= 0; j --){ rst.set(j, rst.get(j) * tmp); tmp *= nums.get(j); }

评论
这个答案算是最佳解法吗?

评论
gongbao 说:这个答案算是最佳解法吗?点击展开...循环num.size()这么多轮没错,每轮在rst里面加一个数字——这只是说rst这个返回的List也有num.size()这么多个元素。而每一个元素的值是多少呢?这跟num.size()没有关系,而是一轮一轮基于原List里面的数字通过乘法计算出来的。而每一轮该计算到这个位置元素的值时候,都刚刚好乘到了原来的List里面的前一个:在第一次正向相乘的时候,到了原List这个位置元素的前一个;在第二次逆向相乘的时候,到了原List这个位置元素的后一个;都恰好没有乘到原List里面这个元素的位置的数字。至于这个算法好不好,我只能说,对于学生来说应该不错。因为代码时间复杂度很低,仅用两个单重循环,时间复杂度就是O (n)。但是对于已经工作的人,如果代码前面有一段注释,要么解释清楚算法,要么直接说一下结果(意思就是后面维护的程序员不要读code了),那还可以。如果就这么摆在这让别人猜,那后面接手的程序员要问候他八辈祖宗了。

评论
你都如何回忆我 带着笑或是很沉默 这些年来 有没有人让你不寂寞 - 不再年轻的毛利小五郎~循环num.size()这么多轮没错,每轮在rst里面加一个数字——这只是说rst这个返回的List也有num.size()这么多个元素。而每一个元素的值是多少呢?这跟num.size()没有关系,而是一轮一轮基于原List里面的数字通过乘法计算出来的。而每一轮该计算到这个位置元素的值时候,都刚刚好乘到了原来的List里面的前一个:在第一次正向相乘的时候,到了原List这个位置元素的前一个;在第二次逆向相乘的时候,到了原List这个位置元素的后一个;都恰好没有乘到原List里面这个元素的位置的数字。至于这个算法好不好,我只能说,对于学生来说应该不错。因为代码时间复杂度很低,仅用两个单重循环,时间复杂度就是O (n)。但是对于已经工作的人,如果代码前面有一段注释,要么解释清楚算法,要么直接说一下结果(意思就是后面维护的程序员不要读code了),那还可以。如果就这么摆在这让别人猜,那后面接手的程序员要问候他八辈祖宗了。点击展开...谢谢您打了这么多字,我天资鲁顿,还是没看懂,我再咀嚼下,刚刚纸上画也没画明白。后面您说注释的问题,我想起前一阵在大公司trainee,他们用很长的命名来代替注释,这是好办法吗?

评论
那么从数学的角度来水,这个数列对应的函数是什么?

评论
gongbao 说:谢谢您打了这么多字,我天资鲁顿,还是没看懂,我再咀嚼下,刚刚纸上画也没画明白。后面您说注释的问题,我想起前一阵在大公司trainee,他们用很长的命名来代替注释,这是好办法吗?点击展开...您客气了。应该是我没说明白。算法这种东西,想说明白有时候也挺难的。要不会写《Data Structure and Algorithm》之类的书的人被称为大神呢。呵呵。另外你这是自己周末在解闷,还是学习或者辅导孩子啊?如果是后者,你在IDE设置断点debug,跟着程序走一遍,立刻就明白了。以我开发和维护Java代码的经验呢,注释或者单独的文档还是很有帮助的。你的method名字再长(其实你这个例子里面的productExcludeItself 已经算很不错的method名字了,比我一般用的名字不知道高到哪里去了),也仍然无法让人完全准确理解。如果有跟code在一起的一行行的注释,那么就帮助很大了。

评论
你都如何回忆我 带着笑或是很沉默 这些年来 有没有人让你不寂寞 - 不再年轻的毛利小五郎~您客气了。应该是我没说明白。算法这种东西,想说明白有时候也挺难的。要不会写《Data Structure and Algorithm》之类的书的人被称为大神呢。呵呵。另外你这是自己周末在解闷,还是学习或者辅导孩子啊?如果是后者,你不妨下载一个intellij的免费版,可以设置断点debug那种,跟着程序走一遍,立刻就明白了。以我开发和维护Java代码的经验呢,注释或者单独的文档还是很有帮助的。你的method名字再长(其实你这个例子里面的productExcludeItself 已经算很不错的method名字了,比我一般用的名字不知道高到哪里去了),也仍然无法让人完全准确理解。如果有跟code在一起的一行行的注释,那么就帮助很大了。点击展开...我找工作呢,半年多没碰编程了,得练练…… 看来注释还是长命名看各个公司的习惯了。另外,我有点迷惑,找工作阶段是多练习这种编程算法呢,还是多弄几个项目放到github上?就算学东西,现在前端后端东西太多了,貌似java, C#, javascript, angular, nodejs,都得会,是不是? 甚至云服务之类的也得会唉,无从下手。我这个鬼地方,说是找初级程序员,都要求这么多

评论
gongbao 说:我找工作呢,半年多没碰编程了,得练练…… 看来注释还是长命名看各个公司的习惯了。另外,我有点迷惑,找工作阶段是多练习这种编程算法呢,还是多弄几个项目放到github上?就算学东西,现在前端后端东西太多了,貌似java, C#, javascript, angular, nodejs,都得会,是不是? 甚至云服务之类的也得会唉,无从下手。我这个鬼地方,说是找初级程序员,都要求这么多点击展开...同行握握手。我觉得Java和C#人家一般不会同时要求吧?这里面你可以选一个了。而后面三个都是JS,但第一个是JS的核心。那么你只要把第一个捡起来了,后面两个就是个框架熟悉的过程。而且大公司前后端如果有不同的人,人家不一定要求Java程序员精通JS啊。你大概了解也就可以了吧。至于云服务呢,一般一个公司有一两个会配置K8s,CICD的,其他人会用就ok吧?也就是说,你能说出那些云服务里面的概念,就差不多了吧?

评论
你都如何回忆我 带着笑或是很沉默 这些年来 有没有人让你不寂寞 - 不再年轻的毛利小五郎~ 超赞 赏 反馈:rowena, keli妈妈 和 gongbao gongbao宇宙最最知名园友 0$(VIP 0) 10,6242019-04-07#11 以nums = 1, 2, 3, 4, 5为例第一轮循环,rst = 1, 1, 2, 6, 24; i.e. tmp, nums[0], nums[0] * nums[1], nums[0]*nums[1]*nums[2], nums[0]*nums[1]*nums[2]*nums[3];第二轮循环,rst[4] = nums[0]*nums[1]*nums[2]*nums[3], tmp = nums[4]rst[3] = nums[0]*nums[1]*nums[2]*nums[4], tmp = nums[4] * nums[3]rst[2] = nums[0]*nums[1]*nums[3]*nums[4], tmp = nums[4] * nums[3] * nums[2]rst[1] = nums[0] *nums[2]*nums[3]*nums[4], tmp = nums[4] * nums[3] * nums[2] * nums[1]rst[0] = 1 * tmp = nums[1] *nums[2]*nums[3]*nums[4],终于理顺了,不过人家是怎么想出来的解法呢?我觉得很精妙啊

评论
Kerrigan 说:同行握握手。我觉得Java和C#人家一般不会同时要求吧?这里面你可以选一个了。而后面三个都是JS,但第一个是JS的核心。那么你只要把第一个捡起来了,后面两个就是个框架熟悉的过程。而且大公司前后端如果有不同的人,人家不一定要求Java程序员精通JS啊。你大概了解也就可以了吧。至于云服务呢,一般一个公司有一两个会配置CICD的,其他人会用就ok吧?也就是说,你能说出那些云服务里面的概念,就差不多了吧?点击展开...不是这样的啊,这边的公司往往要求懂好几门语言,fullstack,娘希匹,还要来了就基本上能独立工作

评论
Kerrigan 说:同行握握手。我觉得Java和C#人家一般不会同时要求吧?这里面你可以选一个了。而后面三个都是JS,但第一个是JS的核心。那么你只要把第一个捡起来了,后面两个就是个框架熟悉的过程。而且大公司前后端如果有不同的人,人家不一定要求Java程序员精通JS啊。你大概了解也就可以了吧。至于云服务呢,一般一个公司有一两个会配置CICD的,其他人会用就ok吧?也就是说,你能说出那些云服务里面的概念,就差不多了吧?点击展开...前几天去了个小公司,还要求会ruby on rails ,又没人能带我,我当场就说自己没信心,算了

评论
gongbao 说:不是这样的啊,这边的公司往往要求懂好几门语言,fullstack,娘希匹,还要来了就基本上能独立工作点击展开...都这样的。面试造火箭,工作拧螺丝。习惯就好。

评论
你都如何回忆我 带着笑或是很沉默 这些年来 有没有人让你不寂寞 - 不再年轻的毛利小五郎~ 超赞 赏 反馈:gongbao 广发银行行长 0$(VIP 0) 8512019-04-07#15 嘿嘿

评论
gongbao 说:前几天去了个小公司,还要求会ruby on rails ,又没人能带我,我当场就说自己没信心,算了点击展开...小公司没有大公司好混,因为小公司一个人当两个人用,要求多面手,大公司分工细,流水作业,如果能与一位 nice 的人一组那就能混下去了。

评论
Kerrigan 说:都这样的。面试造火箭,工作拧螺丝。习惯就好。点击展开...面试造火箭,工作拧螺丝。这话说的好!!

评论
j0n6dj2y2w 说:小公司没有大公司好混,因为小公司一个人当两个人用,要求多面手,大公司分工细,流水作业,如果能与一位 nice 的人一组那就能混下去了。点击展开...你说的是,我先进的大公司,适合养老,我刚刚毕业累就累点吧,要积累经验,攒技术实力啊

评论
Kerrigan 说:都这样的。面试造火箭,工作拧螺丝。习惯就好。点击展开...面试说白了就是一场互动,谁占主动谁就赢了。

评论
gongbao 说:你说的是,我先进的大公司,适合养老,我刚刚毕业累就累点吧,要积累经验,攒技术实力啊点击展开...那你就从底层做起,从零做起,愿意吗?

  ·生活百科 我无法登录麦当劳APP,如何解决?
·生活百科 关于安装太阳能后用电量增加的问题

温哥华 Vancouver-加拿大

这种像栗子的东西是什么?

华人网这种像栗子的东西好像不是栗子,我尝了一口,发苦。街上经常见到,落得满地都是。 评论 [FONT=宋体] [/FONT] 超赞 赏 反馈:森林之歌 N NONADAGuest 0$(VIP ) 2011-11-12#2 回复: 这种像栗子的东西 ...

温哥华 Vancouver-加拿大

原来联合早报也是大外宣

华人网评论 意见不保证正确,但感受保证真实 超赞 赏 反馈:chong.ca 0.01 密 密林深处 9$(VIP 0,#106) 1,6932022-08-14#2 有钱能使鬼推磨,媒体人也是人,给他们钱,让他们做什么都可以。 评论 Dayday- ...

温哥华 Vancouver-加拿大

王局太太太NB了

华人网强烈推荐! 评论 意见不保证正确,但感受保证真实 超赞 赏 反馈:happyhappy2019, 荣耀, tony 和 3 其他人 0.03 L LINDA 论坛 0$(VIP 0,#437) 4272022-05-22#2 谢谢分享! 评论 Dayday-up 说:强烈推荐!点击展 ...

温哥华 Vancouver-加拿大

求助急: 税务局付款

华人网刚才网上提交怎么出现付款的链接,我就到银行网站付,可是在GRA amount owing下面有一个Account number 9 位数的是指自己的SIN号吗?急 评论 不好意思,搞定了。 评论 搞定了就分享一下啊。 ...

温哥华 Vancouver-加拿大

想买笔记本电脑

华人网现在用的事联想thinkpad,I-5处理器,内存小,启动多个程序的时候慢,尤其是用微软的软件的时候。看到ACER I-7处理器的电脑在百斯百上一千出头儿,心里痒痒,想在网上下单,去高贵林 ...