public boolean haveThree(int[] nums) {
int count=0;
for (int i = 0; i < nums.length - 1; i++) {
if (nums[i] == 3 && nums[i + 1] == 3)
return false;
if (nums[i] == 3)
count++;
}
if (nums[nums.length-1] == 3)
count++;
return(count==3);
}
以下是测试结果:
Expected Run
have Three({3, 1, 3, 1, 3}) → true true OK
have Three({3, 1, 3, 3}) → false false OK
have Three({3, 4, 3, 3, 4}) → false false OK
have Three({1, 3, 1, 3, 1, 2}) → false false OK
have Three({1, 3, 1, 3, 1, 3}) → true true OK
have Three({1, 3, 3, 1, 3}) → false false OK
have Three({1, 3, 1, 3, 1, 3, 4, 3}) → false false OK
have Three({3, 4, 3, 4, 3, 4, 4}) → true true OK
have Three({3, 3, 3}) → false false OK
have Three({1, 3}) → false false OK
have Three({3}) → false false OK
have Three({1}) → false false OK
other tests X
这样做太复杂了,只需计算3
的出现次数并执行检查:
int count=0;
for(int i=0; i < nums.length; i++){
if(nums[i]==3)
count++;
}
return (count == 3);
或者,您可以让事情变得更快一些,因为如果您处于n-1位置,并且您到目前为止只计算了一个或一个3
,您知道这可能会失败,因此:
for(int i=0; count <= 3 && (count == 3 || i < nums.length-2+count); i++){
if(nums[i]==3)
count++;
}
return count == 3;
当遇到三个以上3
时,这也停止了。但我建议不要这样做,因为它会使代码更加不可读。
int count=0;
for(int i=0; i < nums.length-1; i++){
if(nums[i] == 3 && nums[i+1] == 3) {
return false;
}
}
for(int i=0; i < nums.length; i++){
if(nums[i]==3)
count++;
}
return (count == 3);
int count=0;
for(int i=0; i < nums.length; i++){
if(nums[i] == 3) {
count++;
if(i+1 < nums.length && nums[i+1] == 3) {
return false;
}
}
}
return (count == 3);
public boolean haveThree (int[] nums) {
if(nums == null) {
return false;
}
int count=0;
for(int i=0; i < nums.length && count <= 3; i++){
if(nums[i] == 3) {
count++;
if(i+1 < nums.length && nums[i+1] == 3) {
return false;
}
}
}
return (count == 3);
}
if (nums[nums.length-1] == 3)
count++;
如果(nums[-1]==3)now-1
不作为索引存在,则将导致对的查询,因此IndexoutofboundsException。我在CodeBat上测试了这一点,实际上,这似乎是问题所在。
解决这个问题的一种方法是添加一个“零长度”检查:
public boolean haveThree(int[] nums) {
if(nums.length <= 0) //hint, although a length is never negative, one better uses "strong conditions"
return false;
int count=0;
for (int i = 0; i < nums.length - 1; i++) {
if (nums[i] == 3 && nums[i + 1] == 3)
return false;
if (nums[i] == 3)
count++;
}
if (nums[nums.length-1] == 3)
count++;
return(count==3);
}
但我建议使用上面所述的版本,因为总的来说,这些方法可以减少错误。
我试图计算2D数组的每个元素,但出于某种原因,我做错了:
假设您希望在排序数组中查找值1的第一个匹配项。对于小数组(二进制搜索之类的东西没有回报),您可以通过简单地计算小于该值的值的数量来实现这一点:结果就是您要查找的索引。 在x86中,您可以使用(加进位)来实现该方法的高效无分支2实现(中的起始指针中的长度和要在中搜索的值): 答案以rax结束。如果你展开它(或者如果你有一个固定的、已知的输入大小),只有cmp;adc指令对被重复,因此每次比较的开销接
问题内容: 我有一个整数数组,我想计算重复出现的元素。首先,我读取数组的大小,并使用从控制台读取的数字对其进行初始化。在数组中,我存储了重复的元素。该数组存储元素连续出现的次数。然后,我尝试搜索重复序列并以特定格式打印它们。但是,它不起作用。 我希望输出看起来像这样: 例如: 如何找到重复的元素及其计数?如何如上所示打印它们? 问题答案: 字典(Java中的HashMap)可以轻松解决此类问题。
https://www.geeksforgeeks.org/count-of-larger-elements-on-right-side-of-each-element-in-an-array/#:~: text=朴素的做法:最简单的做法,一边然后打印出来。 我试图以大于左边数字的顺序计算数字,就像上面网站上描述的那样,但网站中的输出是arraylist,但我只想要一个数字,它是arraylist
问题内容: 我编写了以下代码段来计算每个元素的出现次数。有可能以更短的方式实现这一目标吗? 另外,我只想显示出现1次以上的元素。所以我尝试如下修改,这导致了错误。 正确的方法是什么? 问题答案: 对于后一个问题,您必须进行更改 至 对于第一部分,尚不清楚为什么需要第一条管道,然后需要第二条管道。如果目的是将转换为,请使用: 正如Dici所建议的,您还可以将Collectors链接起来,将每个数字与
问题内容: 如果我有一个数组,我想检查数组中有多少个。在JavaScript中不使用循环循环的最优雅的方法是什么? 问题答案: 很简单: