Problem:
We'll say that a 1 immediately followed by a 3 in an array is an "unlucky" 1. Return true if the given array contains an unlucky 1 in the first 2 or last 2 positions in the array.
unlucky1({1, 3, 4, 5}) → true
unlucky1({2, 1, 3, 4, 5}) → true
unlucky1({1, 1, 1}) → false
Solution:
public boolean unlucky1(int[] nums) { if (nums.length ==0 || nums.length ==1) return false; else if ((nums[0] ==1 && nums[1] ==3) || (nums[1] ==1 && nums[2] ==3) || (nums[nums.length -1] ==3 && nums[nums.length -2] ==1)) return true; else return false; }
This solution will throw a java.lang.ArrayIndexOutOfBoundsException if nums.length = 2 and the second element of nums is 1.
ReplyDeleteFor instance, if nums = {1,1} an exception will be thrown.
Try this:
Deletepublic boolean unlucky1(int[] nums){return((nums.length>1)&&((nums[0]==1&&nums[1]==3)||(nums.length>2&&(nums[1]==1&&nums[2]==3)||(nums[nums.length-2]==1&&nums[nums.length-1]==3)))?true:false);}
Làm bằng đại học
ReplyDeleteLàm bằng đại học uy tín
Làm bằng đại học giá rẻ uy tín
//Here is my solution it work
ReplyDeletepublic static boolean unlucky1(int[] nums) {
for (int i = 0; i < nums.length-1; i++) {
if(nums[0] == 1 && nums[1]== 3 || nums[nums.length-2] == 1 && nums[nums.length-1] == 3) {
return true;
}
if(nums[i] ==1 && nums[i+1]==3)return true;
if(nums[nums.length-2] == 3 && nums[nums.length-1] == 1)return false;
}
return false;
}
public boolean unlucky1(int[] nums) {
ReplyDeleteif (nums.length > 1)
return ((nums[0] == 1 && nums[1] == 3) ||
(nums[1] == 1 && nums[2] == 3)||
(nums[nums.length-2] == 1 && nums[nums.length-1] == 3));
else return false;
}
(nums.length < 2) is a much shorter and efficient substitute for (nums.length ==0 || nums.length ==1).
ReplyDeleteThis is my solution [probably not the best :)]:
public boolean unlucky1(int[] nums) {
if(nums.length < 2){
return false;
}else if(nums[0] == 1 && nums[1] == 3){
return true;
}else if(nums[1] == 1 && nums[2] == 3){
return true;
}else if(nums[nums.length - 2] == 1 && nums[nums.length - 1] == 3){
return true;
}else{
return false;
}
}
Unlike everything else on this page, this is an actual working solution:
ReplyDeletepublic boolean unlucky1(int[] nums) {
boolean o = false;
if (nums.length == 2) {
if (nums[0] == 1 && nums[1] == 3) {
o = true;
}
}
if (nums.length > 2) {
if ((nums[0] == 1 && nums[1] == 3) || (nums[1] == 1 && nums[2] == 3)) {
o = true;
}
if ((nums[nums.length - 2] == 1 && nums[nums.length - 1] == 3)) {
o = true;
}
}
return(o);
}
EASIEST AND BEST SOLUTION:
ReplyDeletepublic boolean unlucky1(int[] nums) {
if(nums.length >= 2){
if( nums[0] == 1 && nums[1] == 3 || nums[1] == 1 && nums[2] == 3 || nums[nums.length-2] == 1 && nums[nums.length-1] == 3 ){
return true;
}
}
return false;
}
ReplyDeleteMy goal was to write this using a one liner I know it doesn't necessarily read well.
public boolean unlucky1(int[] nums) {
return nums.length == 2 && nums[0] == 1 && nums[1] == 3 || nums.length > 2 && nums[0] == 1 && nums[1] == 3 || nums.length > 2 && nums[1] == 1 && nums[2] == 3 || nums.length > 2 && nums[nums.length-2] == 1 && nums[nums.length-1] == 3 ? true:false;
}
One Liner
ReplyDeletepublic boolean unlucky1(int[] nums) {
return (nums.length > 1 && ((nums[0] == 1 && nums[1] == 3) || (nums[nums.length - 2] == 1 && nums[nums.length - 1] == 3))) || (nums.length > 2 && nums[1] == 1 && nums[2] == 3);
}