代码在我的 ide 中运行良好,但在 GeeksforGeeks 上提交后没有得到输出
Code is working good in my ide but not getting output after submitting on GeeksforGeeks
第一次和最后一次出现 X。
一个可能有重复元素的排序数组,任务是找到给定数组中元素 x 第一次和最后一次出现的索引。
注意:如果在数组中找不到数字 x 则打印'-1'。
输入:
第一行包含一个整数 T,即测试用例的数量。每个测试用例的第一行包含两个整数 n 和 x。第二行包含 n spaced 个整数。
输出:
打印数字 x 第一次和最后一次出现的索引,中间有 space。
import java.util.*;
import java.lang.*;
import java.io.*;
class GFG
{
public static void main(String [] args){
Scanner scn = new Scanner(System.in);
int n = scn.nextInt();
int x = scn.nextInt();
int [] arr = new int[n];
for(int i = 0; i < n; i++){
arr[i]= scn.nextInt();
}
int low = 0;
int high = arr.length -1;
int fi;
while(low <= high){
int mid = (low + high)/ 2;
fi = -1;
if(x > arr[mid]){
low = mid + 1;
}else if(x < arr[mid]){
high = mid - 1;
}else{
fi = mid;
high = mid - 1;
}
}
low = 0;
high = arr.length -1;
int li;
while(low <= high){
int mid = (low + high)/ 2;
li = -1;
if(x > arr[mid]){
low = mid + 1;
}else if(x < arr[mid]){
high = mid - 1;
}else{
li = mid;
low = mid + 1;
}
}
System.out.println(fi);
System.out.println(li);
}
}
运行 代码后的输出
-1;
-1;
您的代码中存在一些逻辑错误。
您正在 while
循环中重新初始化变量 fi
和 li
的值。
它们应该只初始化一次,而且是在循环之外。
我已更正您的代码并将其提交到 Geeks For Geeks 练习题,First and last occurrences of X。
查看以下在 GFG 上具有 Accepted 状态的实现:
import java.util.*;
import java.lang.*;
import java.io.*;
class GFG
{
public static void main(String [] args){
Scanner scn = new Scanner(System.in);
int testcase = scn.nextInt();
while(testcase-- > 0){
int n = scn.nextInt();
int x = scn.nextInt();
int [] arr = new int[n];
for(int i = 0; i < n; i++){
arr[i]= scn.nextInt();
}
int low = 0;
int high = arr.length -1;
int fi = -1;
while(low <= high){
int mid = (low + high)/ 2;
if(x > arr[mid]){
low = mid + 1;
}else if(x < arr[mid]){
high = mid - 1;
}else{
fi = mid;
high = mid - 1;
}
}
low = 0;
high = arr.length -1;
int li = -1;
while(low <= high){
int mid = (low + high)/ 2;
if(x > arr[mid]){
low = mid + 1;
}else if(x < arr[mid]){
high = mid - 1;
}else{
li = mid;
low = mid + 1;
}
}
if(fi==-1 || li==-1){
System.out.println(fi);
}else{
System.out.println(fi + " " + li);
}
}
}
}
PS: 接受关于 GFG 实践的判决:
第一次和最后一次出现 X。
一个可能有重复元素的排序数组,任务是找到给定数组中元素 x 第一次和最后一次出现的索引。
注意:如果在数组中找不到数字 x 则打印'-1'。
输入: 第一行包含一个整数 T,即测试用例的数量。每个测试用例的第一行包含两个整数 n 和 x。第二行包含 n spaced 个整数。
输出: 打印数字 x 第一次和最后一次出现的索引,中间有 space。
import java.util.*;
import java.lang.*;
import java.io.*;
class GFG
{
public static void main(String [] args){
Scanner scn = new Scanner(System.in);
int n = scn.nextInt();
int x = scn.nextInt();
int [] arr = new int[n];
for(int i = 0; i < n; i++){
arr[i]= scn.nextInt();
}
int low = 0;
int high = arr.length -1;
int fi;
while(low <= high){
int mid = (low + high)/ 2;
fi = -1;
if(x > arr[mid]){
low = mid + 1;
}else if(x < arr[mid]){
high = mid - 1;
}else{
fi = mid;
high = mid - 1;
}
}
low = 0;
high = arr.length -1;
int li;
while(low <= high){
int mid = (low + high)/ 2;
li = -1;
if(x > arr[mid]){
low = mid + 1;
}else if(x < arr[mid]){
high = mid - 1;
}else{
li = mid;
low = mid + 1;
}
}
System.out.println(fi);
System.out.println(li);
}
}
运行 代码后的输出 -1; -1;
您的代码中存在一些逻辑错误。
您正在 while
循环中重新初始化变量 fi
和 li
的值。
它们应该只初始化一次,而且是在循环之外。
我已更正您的代码并将其提交到 Geeks For Geeks 练习题,First and last occurrences of X。
查看以下在 GFG 上具有 Accepted 状态的实现:
import java.util.*;
import java.lang.*;
import java.io.*;
class GFG
{
public static void main(String [] args){
Scanner scn = new Scanner(System.in);
int testcase = scn.nextInt();
while(testcase-- > 0){
int n = scn.nextInt();
int x = scn.nextInt();
int [] arr = new int[n];
for(int i = 0; i < n; i++){
arr[i]= scn.nextInt();
}
int low = 0;
int high = arr.length -1;
int fi = -1;
while(low <= high){
int mid = (low + high)/ 2;
if(x > arr[mid]){
low = mid + 1;
}else if(x < arr[mid]){
high = mid - 1;
}else{
fi = mid;
high = mid - 1;
}
}
low = 0;
high = arr.length -1;
int li = -1;
while(low <= high){
int mid = (low + high)/ 2;
if(x > arr[mid]){
low = mid + 1;
}else if(x < arr[mid]){
high = mid - 1;
}else{
li = mid;
low = mid + 1;
}
}
if(fi==-1 || li==-1){
System.out.println(fi);
}else{
System.out.println(fi + " " + li);
}
}
}
}
PS: 接受关于 GFG 实践的判决: