标签:count arr 字节 int ++ 油豆瓶 num 2019 set1
参加了字节的笔试,白天刷了一整天的18年笔试题(其实就做了2题hhh),感觉会用Map<Integer, List>应该能做出至少两题,看到油豆后疯狂思考怎么用Map的套路解决,直至放弃。后灵光乍现,觉Set大法可行,一试通过90%,赶紧换下一题,望字节大佬批卷手下留情。
第一题如下
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int[][] arr = new int[num][num];
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
//遍历所有的输入存放在二维数组中
arr[i][j] = scanner.nextInt();
}
}
Set<Integer> set1 = new HashSet<>();
int count = 0;//油豆瓶数
for (int i = 0; i < num; i++) {
for (int j = i + 1; j < num; j++) {
//遍历数组中每一个值
if (arr[i][j] >= 3) {
//如果arr[i][j]>=3则需要判断是 新的油豆 还是 已存在的某一个油豆集的补充
//如果目前的Set中没有i和j,则说明是新的油豆集,否则则是补充
if (!(set1.contains(i) || set1.contains(j))) {
count++;
}
//set可以去重,所以不用担心重复值
set1.add(i);
set1.add(j);
}
}
}
//根据观察认为,“独立存在”的油豆瓶这一列/行都为0,如arr[1][]或arr[][1]都是0,则count数需要+1。这里计算没有在set中的用户数left,left就是所说的行/列都为0的“独立油豆”
int left = num - set1.size();
System.out.println(count + left);
考试结束后改进的版本:合并了循环;判断条件中的>3改成了>=3。不知道对不对(坏笑.jpg),心态小崩,刷了一天的算法题,第一题都没有100%通过。(感觉10%没通过就是因为>3的原因,我同学>=3就通过了)
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int[][] arr = new int[num][num];
Set<Integer> set1 = new HashSet<>();
int count = 0;
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
arr[i][j] = scanner.nextInt();
if (arr[i][j] >= 3) {
if (!(set1.contains(i) || set1.contains(j))) {
count++;
}
set1.add(i);
set1.add(j);
}
}
}
int left = num - set1.size();
System.out.println(count + left);
标签:count,arr,字节,int,++,油豆瓶,num,2019,set1 来源: https://blog.csdn.net/Mart1nn/article/details/100067836
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。