前言:
现时各位老铁们对“坐在马桶上看算法”大概比较看重,你们都需要知道一些“坐在马桶上看算法”的相关资讯。那么小编同时在网上汇集了一些有关“坐在马桶上看算法””的相关内容,希望同学们能喜欢,朋友们快快来学习一下吧!题目:题目描述:
给一个数组,输出去掉自己位置元素本身元素以外的其他元素的乘积。
题目意思举例:
input:nums=[1,2,3,4];
output:res=[24,12,8,6];
例子解释:
res[0]=2*3*4=24;
res[1]=1*3*4=12;
res[2]=1*2*4=8;
res[3]=1*2*3=6;
解题思路:
定义一个变量product用于保存数组中全部元素的乘积(注意:product的初始值设置为0,0元素是个坑点),这样计算当前位置的结果时候用product除以当前位置元素即可。
由于0比较特殊,要单独处理,我用了set结构来保存0元素对应的位置,具体参见代码。
代码截图及代码:
public int[] productExceptSelf(int[] nums) { Set<Integer> set = new TreeSet<>(); int product = 1; for (int i = 0; i < nums.length; i++) { if (nums[i] != 0) {//0做特殊处理,别做“让一个老鼠害了一锅粥的事” product *= nums[i]; } else {//保存0元素对应位置的元素 set.add(i); } } for (int i = 0; i < nums.length; i++) { if (!set.contains(i)) {// nums[i]!=0 if (set.isEmpty()) {// 其他的位置没有0 nums[i] = product / nums[i]; } else {// 其他位置包含0 nums[i] = 0; } } else {// nums[i]==0 if (set.size() > 1) {// 除了当前位置还有其他位置为0 nums[i] = 0; } else {// 只有当前位置为0; nums[i] = product; } } } return nums; }后记:
一定有更好的思路,笔者觉得该思路较为简单。欢迎读者留言讨论
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #坐在马桶上看算法