招行笔试3.27招行信用卡笔试招商银行信用卡笔试

第一题太简单,第二题太难,100行代码没解出来哭了。。。1+0
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        for (int i = 0; i < N; i++) {
            int curr = sc.nextInt();
            int col, zeroNum = 0;
            boolean bigtwo = false;
            for (int j = 0; j < curr; j++) {
                col = sc.nextInt();
                if(col >= 2) bigtwo = true;
                else if(col == 0) zeroNum++;
            }
            if(bigtwo) System.out.println(curr + 1 - zeroNum);
            else System.out.println(-1);
        }
        sc.close();
    }
}

第二题手写快排、手写最长递增子序列。。。然后还是0,真的太难了,完全没思路啊。。
import java.util.Scanner;

public class Main2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        for (int i = 0; i < T; i++) {
            int n = sc.nextInt();
            int[] len = new int[n];
            int[] wei = new int[n];
            int[] len2 = new int[n];
            int[] wei2 = new int[n];
            for (int j = 0; j < n; j++) {
                len[i] = sc.nextInt();
                len2[i] = len[i];
            }
            for (int j = 0; j < n; j++) {
                wei[i] = sc.nextInt();
                wei2[i] = wei[i];
            }
            sort(len, wei);
            int[] left = findLogest(wei, n);
            int res = 0;
            while (left.length > 0){
                left = findLogest(left, left.length);
                res++;
            }
            for (int j = 1; j < n; j++) {
                if(len[j] == len[j - 1]) res--;
            }
            sort(wei2, len2);
            int[] right = findLogest(len2, n);
            int cur = 0;
            while (right.length > 0){
                right = findLogest(left, left.length);
                cur++;
            }
            for (int j = 1; j < n; j++) {
                if(wei2[j] == wei2[j - 1]) cur--;
            }
            res = Math.min(res, cur);
            System.out.println(res);
        }
        sc.close();
    }

    private static int[] findLogest(int[] wei, int n) {        //求数组最长递增子序列
        int[] curr = new int[n + 1];
        curr[1] = wei[0];
        int len = 1, start = 0, end = len, mid;
        for (int i = 1; i < n; i++) {
            if (wei[i] > curr[len]){
                len++;
                curr[len] = wei[i];
            }else {
                start = 1;
                end = len;
                while (start <= end){
                    mid = (start + end) / 2;
                    if(curr[mid] < wei[i]) start = mid + 1;
                    else end = mid - 1;
                }
                curr[start] = wei[i];
            }
        }
        if(n == len) return new int[0];
        int[] res = new int[n - len];   //然后返回除了最长递增子序列外其它的元素组成的数组
        int j = 0, k = 0;
        for (int i = 0; i < n; i++) {
            if(wei[i] != curr[j]){
                res[k] = wei[i];
                k++;
                j++;
            }
        }
        return res;
    }

    private static void sort(int[] len, int[] wei) {        //快排变种(排序一个数组的时候,按照顺序将另一个数组也交换位置)
        sort(len, wei, 0, len.length - 1);
    }

    private static void sort(int[] len, int[] wei, int l, int h) {
        if(l >= h) return;
        int j = partition(len, wei, l, h);
        sort(len, wei, l, j - 1);
        sort(len, wei, j + 1, h);
    }

    public static int partition(int[] nums1, int[] nums2, int l, int h){
        int i = l, j = h + 1;
        int val = nums1[l];
        while (true){
            while (nums1[++i] < val && i != h);
            while (nums1[--j] > val && j != l);
            if(i >= j) break;
            swap(nums1, nums2, i, j);
        }
        swap(nums1, nums2, l, j);
        return j;
    }

    private static void swap(int[] nums1, int[] nums2, int i, int j) {
        int temp1 = nums1[i], temp2 = nums2[i];
        nums1[i] = nums1[j];
        nums2[i] = nums2[j];
        nums1[j] = temp1;
        nums2[j] = temp2;
    }
}


#招行卡中心笔试##招商银行信用卡中心##笔试题目#
全部评论
第二题AC代码 nums=[[4,1],[9,3],[5,5],[2,4],[2,1]] def solution(nums):     nums.sort(key=lambda x:(x[0],x[1]))     res=[nums[0]]     for num in nums[1:]:         found=False         for i in range(len(res)):             if num[0]>=res[i][0] and num[1]>=res[i][1]:                 res[i]=num                 found=True                 break         if found==False:             res.append(num)     return len(res) solution(nums)
2 回复 分享
发布于 2020-03-27 21:33
总体思路是将木棍先按长度排序,再按质量排序。 设一个栈,将访问过的木棍入栈,栈大小达到n时循环结束。 设一个标记数组,标记某根木棍是否被访问过。 在每次循环内,遍历木棍,如果木棍未被访问过,且长度和质量都大于等于栈顶元素的长度和质量,就将其入栈。每遍历一次就将结果加1。
1 回复 分享
发布于 2020-03-27 21:37
第二题我也没干出来 后面选答题都没写
点赞 回复 分享
发布于 2020-03-27 21:14
第二题30行代码 80%😂
点赞 回复 分享
发布于 2020-03-27 21:15
第二题确实太难了,我一点想法都没有
点赞 回复 分享
发布于 2020-03-27 21:16
第二题是不是要求有多少个最长递增子序列?把最长的排除之后再求?
点赞 回复 分享
发布于 2020-03-27 21:17
同没有思路     选答题 都没答啊   我哭辽
点赞 回复 分享
发布于 2020-03-27 21:21
我感觉我错了,只会dfs,然后一直正在查询中,没给我结果。 http://simp.ly/p/DFmmz8
点赞 回复 分享
发布于 2020-03-27 21:29
谢谢大佬!第一题居然可以这样
点赞 回复 分享
发布于 2020-03-27 21:32
可以看看这个思路,终于看懂了,一看就会,一写就废系列https://blog.csdn.net/dingzi1875/article/details/101494695?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
点赞 回复 分享
发布于 2020-03-27 21:47

相关推荐

工作基本定了,比较满意。这深度学习真是难搞啊,论文看不懂,代码看不懂,不会改,创新点???&nbsp;还有一个月中期,怎么搞,已经抑郁了,没有小论文要求,我真是非常幸运了,不然就我这科研能力…………&nbsp;感觉自己对自己失去信心,无时无刻不在否定自己取得一些成绩都是运气好罢了,真的能顺利毕业吗?严重内耗、无力感爆棚啊…………
AI牛可乐:哎呀,听起来你最近压力好大呀,毕业论文和工作的双重压力一定让你感觉像是背了两座山呢。深度学习确实挺复杂的,就像是要在一片迷雾中找到出路一样。但是,你已经很棒了,工作都定好了,这是很大的成就呢! 论文的事情,别太担心。每个人都有看不懂代码和论文的时候,这是正常的。至于创新点嘛,有时候灵感就像小猫一样,需要一点一点地哄出来的。你可以先试试把你看过的资料整理一下,说不定就能找到新的思路呢。 中期答辩前,你可以列个计划,一步一步来,把大问题分解成小问题,一点一点克服。记得,你不是一个人在战斗,你的导师、同学都是你的战友哦。 至于信心嘛,别否定自己,每个人都会有低谷的时候。你已经取得的成绩,都是你实力的体现。毕业不是问题,只要你不放弃,就一定能顺利走过去的。加油哦,我相信你可以的! 对了,如果你愿意的话,可以点击我的头像,我们私信聊,也许我能帮你出出主意,或者就是简单地聊聊天,分散一下你的注意力也好呀。🐮💪🌟
点赞 评论 收藏
分享
11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
头像
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
1 32 评论
分享
牛客网
牛客企业服务