255 h260 和为k的子数组
admin
2024-02-11 16:13:09

方法1 纯暴力

思路:
i:左端点
j:右端点
然后用z统计[i,j]之间的值
时间复杂度 o(n3)

方法2 暴力算法优化

用z统计[i,j]之间的值,当j–>j+1,其实不需要从头统计[i,j],[i,j+1]=[i,j]+num[j+1]

 // 法一 暴力public int subarraySum(int[] nums, int k) {int sum;int res =0;for (int i = 0; i < nums.length; i++) {sum=0;for (int j = i; j < nums.length; j++) {sum+=nums[j];if (sum==k){res++;}}}return res;}

法三 前缀和

思路:
求出所有元素的前缀,然后使用i,j穷举出所有的前缀差,=k,就+1
前缀和关键:
prefixNum[i] num[i]前面的元素(不包括自身)的和

==if (prefixSum[j+1]-prefixSum[i]k) // 用我前面的(包括我)-别人前面的(不包括别人),这样可以列举所有的情况,当i=j时,代表只有num[i]

public int subarraySum02(int[] nums, int k) {int[] prefixSum=new int[nums.length+1]; //prefixNum[i]  num[i]前面的元素(不包括自身)的和int res =0;prefixSum[0]=0;for (int i = 0; i < nums.length; i++) {prefixSum[i+1]=prefixSum[i]+nums[i];}for (int i = 0; i < nums.length; i++) {for (int j = i; j < nums.length; j++) {if (prefixSum[j+1]-prefixSum[i]==k)  // 用我前面的(包括我)-别人前面的(不包括别人)res++;}}return res;}

相关内容

热门资讯

第160次中老缅泰湄公河联合巡... 12月29日15时30分,参加第160次中老缅泰湄公河联合巡逻执法行动的中方53107艇、53108...
视频丨解放军演习最新画面来了 12月29日开始,中国人民解放军东部战区组织陆军、海军、空军、火箭军等兵力,位台湾海峡、台岛北部、台...
最新或2023(历届)513感... 啊!我慈祥的母亲!是您让我静静地等待,是您让小花儿呼然绽放,是您决定了我的悲伤。
最新或2023(历届)母亲节手... 最新或2023(历届)5月13日,是母亲节。同学们制作了许多精美的感恩母亲主题手抄报边框内容花边图案...
最新或2023(历届)庆祝母亲... 最新或2023(历届)的母亲节即将到来,太阳教育网为大家收集整理很多精美的母亲节手抄报边框内容花边图...