📣 独立日限时特惠: VIP通行证立减$68
查看: 1344| 回复: 4
跳转到指定楼层
上一主题 下一主题
收起左侧

[学Java/C#] 974这题,负数取余的问题

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
先求前缀和,

再对前缀和求余数,

最后对同样余数的数,做排列组合。


  1. class Solution {

  2.     public int subarraysDivByK(int[] A, int K) {

  3.         int N = A.length;

  4.         int[] P = new int[N + 1];

  5.         for (int i = 0; i < N; ++i) P[i + 1] = P[i] + A[i];

  6.         int[] count = new int[K];

  7.         for (int x : P) {
  8.             
  9.             count[ (x % K + K) % K ]++;   
  10.         }

  11.         int ans = 0;

  12.         for (int v : count)
  13.             ans += v * (v - 1) / 2;
  14.         
  15.         return ans;
  16.     }   
  17. }
复制代码





有人知道为何求余数,要用这个方式求吗?  

(x % K + K) % K



上一篇:【亚马逊】【OA】整理60道 - 求大米
下一篇:List数组的语法问题
🔗
usr_opta 2020-12-23 13:03:02 | 只看该作者
全局:
你都知道是负数的问题了。
(-5) % 3 == -2
((-5) % 3 + 3) % 3 == 1
数组下标非负。
回复

使用道具 举报

🔗
test001 2020-12-23 13:25:34 | 只看该作者
全局:
X % K 有可能出现负数,加上K后结果肯定是正数,再取余数保证数组下标不出现负数(越界)情况。
对于正数来说,由于 K % K = 0,所以加上 K 不影响计算结果
回复

使用道具 举报

🔗
 楼主| techDiscussion 2020-12-23 14:10:10 | 只看该作者
全局:
usr_opta 发表于 2020-12-23 13:03
你都知道是负数的问题了。
(-5) % 3 == -2
((-5) % 3 + 3) % 3 == 1

数组下标非负  --> 这是什么意思?
回复

使用道具 举报

🔗
Olivia0624 2020-12-23 14:46:13 | 只看该作者
全局:
techDiscussion 发表于 2020-12-23 01:10
数组下标非负  --> 这是什么意思?

(-5) % 3 == -2
你不能取count[-2]啊,所以要加个K变成1再取count[1]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表