剑指Offer66.构建乘积数组(前缀积和后缀积)
思路:题目不让用除法,类似于前缀和,我们很容易想到前缀积和后缀积,也就是说对于每一位数字,我们计算一个前缀积数组用来存放某个数字之前的数字之积,再用一个后缀数组保存这个数组中这个数后面数的乘积,之后前缀积和后缀积相乘即得解

1 public static int[] constructArr(int[] a) { 2 int len = a.length; 3 int[] left = new int[len]; 4 int[] right = new int[len]; 5 left[0] = right[len - 1] = 1; 6 for(int i = 1; i < len; i ++) { 7 left[i] = left[i - 1] * a[i - 1]; 8 right[len - i - 1] = right[len - i] * a[len - i]; 9 } 10 int[] ans = new int[len]; 11 for(int i = 0; i < len; i ++) { 12 ans[i] = left[i] * right[i]; 13 } 14 return ans; 15 }
时间并不会因为你的迷茫和迟疑而停留,就在你看这篇文章的同时,不知道有多少人在冥思苦想,在为算法废寝忘食,不知道有多少人在狂热地拍着代码,不知道又有多少提交一遍又一遍地刷新着OJ的status页面……
没有谁生来就是神牛,而千里之行,始于足下!
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步