龙空技术网

蹲在马桶看算法(Day20—LeetCode之NO.238除自身以外数组乘积)

Techsnail 246

前言:

现时各位老铁们对“坐在马桶上看算法”大概比较看重,你们都需要知道一些“坐在马桶上看算法”的相关资讯。那么小编同时在网上汇集了一些有关“坐在马桶上看算法””的相关内容,希望同学们能喜欢,朋友们快快来学习一下吧!

题目:题目描述:

给一个数组,输出去掉自己位置元素本身元素以外的其他元素的乘积。

题目意思举例:

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;	}
后记:

一定有更好的思路,笔者觉得该思路较为简单。欢迎读者留言讨论

标签: #坐在马桶上看算法