京东Java编程题

看了大佬发的题解很难受,为啥都是暴利,自己就AC不了,为啥都是用栈来解决,我还是AC0%,第一题确实没什么思路。第二题、第三题都是感觉很简单的题目,就是AC不了。求大佬的解答。
第二题:暴力,只过了10%,就是Y一个一个枚举。

public class JD2 {  public static void main(String[] args) {  Scanner scanner = new Scanner(System.in);  int N = scanner.nextInt();  long[] arr = new long[N];  long maxValue = Long.MIN_VALUE;  for (int i = 0; i < N; i++) {  arr[i] = scanner.nextLong();  maxValue = Math.max(maxValue, arr[i]);  }  for (int i = 0; i < arr.length; i++) {  boolean flag = false;  for (long Y = 2; Y <= Math.sqrt(maxValue) + 1; Y += 2) {  if (arr[i] % Y == 0 && arr[i] / Y % 2 == 1) {//判断X  System.out.println(arr[i] / Y + " " + Y);  flag = true;  break;  }  }  if (!flag)  System.out.println("No");  }  }
}

第三题:用stack模拟,遍历,遇到“(”就入栈,遇到“)”就出栈,如果栈为空就把“)”如栈,如果遍历结束后栈容量为2或者0,就说明可以交换成功。(但是我没有判断左右括号是否相等的情况)

import java.util.LinkedList;
import java.util.Scanner;

public class JD3 {  public static void main(String[] args) {  Scanner scanner = new Scanner(System.in);  int N = scanner.nextInt();  String[] strings = new String[N];  for (int i = 0; i < N; i++) {  strings[i] = scanner.next();  }  for (int i = 0; i < N; i++) {  String input = strings[i];  LinkedList<Character> stack = new LinkedList<>();  for (int j = 0; j < input.length(); j++) {  if (input.charAt(j) == '(') {  stack.add(input.charAt(i));  continue;  }  if (input.charAt(j) == ')') {  if (stack.isEmpty()) {  stack.add(input.charAt(i));  continue;  } else {  stack.removeLast();  }  }  }  if (stack.size() == 2 || stack.size() == 0) {  System.out.println("Yes");  } else {  System.out.println("No");  }  }  }

}
我自己测试了一下:

真的挺难受的,也不知道是哪里错了。
#笔试题目#
全部评论
我更难受的是感觉第一次70·发现了有个地方考虑不周改了一下,变成了10,又考虑了一下觉得更周全。结果就变成了0。
点赞 回复 分享
发布于 2018-04-09 21:28
你代码没format所以没AC
点赞 回复 分享
发布于 2018-04-15 22:43
第二题我和你一样,也是暴力,long,但是只能过10,不知道为什么。第一题不会,第三题60
点赞 回复 分享
发布于 2018-04-10 08:11
我一开始跟你一样。。全部改成long突然就行了。。
点赞 回复 分享
发布于 2018-04-09 21:33
import java.util.Scanner; public class Main1 {     public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         long t = Integer.parseInt(sc.nextLine());         for(long r = 1;r <= t;r++) {                          long n = Long.parseLong(sc.nextLine());             if(n%2==1)             {                 System.out.println("No");                 continue;             }                          boolean flag = false;             for(long y = 2;y<n/2;y=y+2) {                                  if(n % y == 0 && (n/y)%2 == 1) {                     long x = n/y;                     System.out.println(x + " " + y);                     flag =true;                     break;                 }             }                          if(!flag)                 System.out.println("No");                                                        }     } }
点赞 回复 分享
发布于 2018-04-09 21:33
第二题要优化一下,在 N 为奇数直接“No”,从 30 提高到 100 第三题也要优化一下,在左括号不等于右括号的时候直接“No”也能 AC,从 40 提高到 100
点赞 回复 分享
发布于 2018-04-09 21:30
第三题这样就完了。。我居然放弃了。。
点赞 回复 分享
发布于 2018-04-09 21:28
等于0是不成功吧,一定要交换一次,没有一开始判断size是不是0
点赞 回复 分享
发布于 2018-04-09 21:27
第一题 Leetcode 原题了解一下 https://leetcode.com/problems/count-different-palindromic-subsequences/description/
点赞 回复 分享
发布于 2018-04-09 21:27

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务