网易笔试

第三题   回文... 70%  求解惑...
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int n=in.nextInt();
            int[] nums=new int[n];
            for(int i=0;i<n;i++){
                nums[i]=in.nextInt();
            }
            System.out.println(circle(nums,n));
        }
        in.close();
    }
//    public boolean iscircle(int[] nums,int n){
//        int j=0;
//        while(j<=(n/2)-1&&nums[j]==nums[n-j-1])
//            j++;
//        if(j==n/2)
//            return true;
//        else
//            return false;
//    }
    public static int circle(int[] nums,int n){
        int count=0;
        List<Integer> list=new ArrayList<Integer>();
        int i=0;
        for (int num:nums){
            list.add(i,num);
            i++;
        }
        for(int j=0;j<=(n+1)/2-1;j++){
            if(list.get(j)==list.get(n-j-1))
                continue;
            else{
                int a=list.get(j)+list.get(j+1);
                list.set(j,a);
                list.remove(j+1);
                n--;
                count++;
                j--;
            }
        }
        return count;
    }
}
第二题  暗黑  80%...
n=2(n-2)+(n-1)      n-1:....CA    n可以在n-1尾部2选1   还有一种情况      n-1;......AA  那n尾部3选一  此时n-1的情况和n-2相同  综合起来就是最前面的式子。不过只通过80  懒得思考了  直接交卷  
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int n=in.nextInt();
            int res=caculate(n);
            System.out.println(res);
        }
        in.close();
    }

    private static int caculate(int n) {
        int res=0;
        if(n<=0)
           return 0;
        if(n==1){
            return 3;
        }
        if(n==2)
            return 9;
        res=2*caculate(n-1)+caculate(n-2);
        return res;
    }
}
第一题  翻转  100
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String x = String.valueOf(in.nextInt());
            StringBuffer a=new StringBuffer(x);
            a=a.reverse();
            String y = String.valueOf(in.nextInt());
            StringBuffer b=new StringBuffer(y);
            b=b.reverse();
            int c=Integer.parseInt(String.valueOf(a))+Integer.parseInt(String.valueOf(b));
            StringBuffer d=new StringBuffer(String.valueOf(c));
            System.out.println(Integer.parseInt(String.valueOf(d.reverse())));
        }
    }
}

全部评论
大神可以讲讲思路么
点赞 回复 分享
发布于 2016-09-12 21:03
回文写得复杂了,其实好简单的。一个数组,O(n)遍历一遍就可以了。 然后暗黑那个,需要int>>long,29,30越界
点赞 回复 分享
发布于 2016-09-13 02:11
回文100 import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class HWS { public static void main(String[] args) { Scanner reader = new Scanner(System.in); while(reader.hasNext()){ int n = Integer.valueOf(reader.nextLine()); String[] s = reader.nextLine().split(" "); List<Integer> list = new ArrayList<Integer>(); for(int i = 0;i < n;i++){ list.add(Integer.valueOf(s[i])); } if(list.size() == 0 || list.size() == 1){ System.out.println(0); break; } int count = 0; while(list.size() > 2){ if((int)list.get(0) == (int)list.get(list.size() - 1)){ list.remove(0); list.remove(list.size() - 1); } else if((int)list.get(0) > (int)list.get(list.size() - 1)){ int m = list.get(list.size() - 1) + list.get(list.size() - 2); list.remove(list.size() - 1); list.remove(list.size() - 1); list.add(m); count++; }else{ int m = list.get(0) + list.get(1); list.remove(0); list.remove(0); List<Integer> list2 = new ArrayList<Integer>(); list2.add(m); list2.addAll(list); list = list2; list2 = null; count++; } }    if(list.size() == 2 && (int)list.get(0) != (int)list.get(1))    count++; System.out.println(count); } } }
点赞 回复 分享
发布于 2016-09-12 20:51
真大神
点赞 回复 分享
发布于 2016-09-12 21:12
typedef long long LL; #define CLR(a) memset(a, 0, sizeof(a)) int main(){ int n, x, res = 0; cin >> n; deque<int> dq; for (int i = 1; i <= n; i++){ cin >> x; dq.push_back(x); } while (dq.size() > 1){ int a = dq.front(), b = dq.back(); dq.pop_front(); dq.pop_back(); while (a != b){ if (a < b){ while (a < b && !dq.empty()){ a += dq.front(); dq.pop_front(); res++; } if (a == b){ continue; } else if (dq.empty()){ res++; break; } } if (a > b){ while (a > b && !dq.empty()){ b += dq.back(); dq.pop_back(); res++; } if (a == b) continue; else if (dq.empty()){ res++; break; } } } } cout << res << endl; return 0; }
点赞 回复 分享
发布于 2016-09-12 21:22
回文,在合并的时候要判断,从小的那边合并,才行。否则不可能是最小操作次数
点赞 回复 分享
发布于 2016-09-12 21:25
这三道题的分值是都是20吗?
点赞 回复 分享
发布于 2016-09-12 23:09

相关推荐

10-11 15:42
皖西学院 Java
青鱼LINK:我硕士,也是java0面试,吾道不孤
点赞 评论 收藏
分享
10-10 17:54
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务