不知怎的,我设法用下面的代码找到一个特定的值,但是我如何搜索数组的值是否为1,右下一个值是3
unlucky1([1, 3, 4, 5]) → true
unlucky1([2, 1, 3, 4, 5]) → true
unlucky1([1, 1, 1]) → false
public boolean unlucky1(int[] nums) {
//int[] a = new int[] {1,3};
for(int i: nums)
{
if (i == 1 )
return true;
}
return false;
}
答案 0 :(得分:2)
您可以使用状态机:
boolean wasOne = false;
for (int i: nums) {
if (i == 3 && wasOne) {
return true;
}
wasOne = i == 1;
}
return false;
答案 1 :(得分:1)
for-each
循环隐藏 迭代器(或此处的索引),因此您无法获取当前值和同时检查下一个值。使用标准循环。此外,由于您无法访问任何字段,因此您可以制作方法static
。像,
public static boolean unlucky1(int[] nums) {
for (int i = 0; i < nums.length - 1; i++) {
if (nums[i] == 1 && nums[i + 1] == 3) {
return true;
}
}
return false;
}
而且,在Java 8+中,您 可以 用IntStream
和anyMatch
来表达
public static boolean unlucky1(int[] nums) {
return IntStream.range(0, nums.length - 1)
.anyMatch(i -> nums[i] == 1 && nums[i + 1] == 3);
}
请注意两种情况下的nums.length - 1
,即确保nums[i + 1]
不超过条件检查中length
数组的nums
。< / p>
已更新,因为您未添加下一个条件 -
在数组的前2个或后2个位置。
那个检查员很严格。请仔细按照说明操作。我得到(工作)
public boolean unlucky1(int[] nums) {
int len = (nums == null) ? 0 : nums.length;
for (int i = 0; i < 2 && i + 1 < len; i++) {
if (nums[i] == 1 && nums[i + 1] == 3) {
return true;
}
}
if (len - 2 <= 0) {
return false;
}
for (int i = len - 2; i + 1 < len; i++) {
if (nums[i] == 1 && nums[i + 1] == 3) {
return true;
}
}
return false;
}
你也可以在没有循环的情况下实现,比如
public boolean unlucky1(int[] nums) {
int len = (nums != null) ? nums.length : 0;
if (len < 2) {
return false;
}
if ((nums[0] == 1 && nums[1] == 3) || (nums[1] == 1 && nums[2] == 3)) {
return true;
}
return len > 3 && ((nums[len - 4] == 1 && nums[len - 3] == 3) //
|| (nums[len - 2] == 1 && nums[len - 1] == 3));
}
我交换了三元顺序,但这并不重要。
答案 2 :(得分:0)
尝试此更新的代码。
导致您的question
public boolean unlucky1(int[] nums) {
int count = 0;
for(int i=0;i<nums.length;i++)
{
if (nums[i] == 1 && (i+1)<nums.length && nums[i+1]==3){
if(i<2){
return true;
}
else if(i > nums.length-3){
return true;
}
}
}
return false;
}
或强>
public boolean unlucky1(int[] nums) {
int len = nums.length;
if(len<2) return false;
if ((nums[0] == 1 && nums[1]==3)||(len>2 && nums[1] == 1 && nums[2]==3)){
return true;
}
if (nums[len-2] == 1 && nums[len-1]==3){
return true;
}
return false;
}
答案 3 :(得分:0)
尝试使用基本的for循环:
public boolean unlucky1(int[] nums) {
boolean match = false;
for (int i = 0; nums.length - 1 > i; i++) {
if (1 == nums[i] && 3 == nums[i + 1]) {
match = true;
break;
}
}
return match;
}