招行笔试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

相关推荐

勤奋努力的椰子这就开摆:美团骑手在美团工作没毛病
投递美团等公司10个岗位
点赞 评论 收藏
分享
1 32 评论
分享
牛客网
牛客企业服务