神刀安全网

携程春招移动端编程题


第一题

从数组中找出连续的最大值
如输入1,-3,5,5,-6,-2,-7 输出10
我自己写的maxSum()方法只通过百分之50
舍友的maxSum2()方法全通过了 不知道我漏掉哪里了 先记录一下

… 理解了 我输出的时候从0开始了 真是蠢哭自己 如果最大是负数就输出错了 让max从a0开始就好了 一个教训…

public class xiechengoj1 {       static int maxSum(int[] a) {          int x[]=new int[a.length];          x[0]=a[0];          for(int i=1;i<a.length;i++){              if(a[i]>x[i-1]+a[i]){                  x[i]=a[i];              }else                  x[i]=x[i-1]+a[i];          }          int max=0;          for(int i=0;i<a.length;i++){              if(x[i]>max)                  max=x[i];          }          for(int i=0;i<a.length;i++)              System.out.print(x[i]+" ");          return max;         }       static int maxSum2(int[] a) {          int temp=a[0];          int sum=a[0];          for(int i=1;i<a.length;i++){              if(temp<0){                  temp=0;              }              temp+=a[i];              if(sum<temp)                  sum=temp;          }          return sum;      }     /******************************结束写代码******************************/           public static void main(String[] args){             Scanner sc = new Scanner(System.in);              String s=sc.nextLine();             String [] x=s.split(" ");             int [] a=new int[x.length];             for(int i=0;i<a.length;i++)                 a[i]=Integer.parseInt(x[i]);             int res;              res = maxSum(a);             System.out.println(String.valueOf(res));               System.out.println(maxSum2(a));  //5 5 5 9 -23 -34 3 399 -444 3         }  }

第二题

从一堆数里选出第一个只出现一次的数,时间复杂度0(n)
如1,1,2,2,3,3,4,5,4,8 输出 5

public class xiechengoj2 {          public static void main(String[] args){             Scanner in = new Scanner(System.in);             String s=in.nextLine();             String s1[]=s.split(",");             HashSet<Integer> set=new HashSet<>();             HashMap<Integer, Integer> map=new HashMap<>();             int a[]=new int[s1.length];             for(int i=0;i<s1.length;i++)                 a[i]=Integer.parseInt(s1[i]);             for(int i=0;i<s1.length;i++){                 if(set.add(a[i])){                     map.put(a[i],0);                 }else{                     map.put(a[i],1);                 }             }             Iterator iter = map.entrySet().iterator();             while(iter.hasNext()){                 Map.Entry entry=(Map.Entry)iter.next();                 int value=(int) entry.getValue();                 if(value==0){                     System.out.println((int) entry.getKey());                                         break;                 }             }          } }

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 携程春招移动端编程题

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址