java笔试-小红书秋招笔试-9.6(子矩阵索引、未出现的最小自然数、航海危险区)

java通关整理汇总-Java基础、计算机网络、数据库、设计模式、框架、算法模板、笔试


1.给定一个数组,找出两个索引位置,使得这之间的元素排序后,数组是升序
只有78%,一直报时间超限

    public static int[] subSort(int[] arr) {
       int[] brr = new int[arr.length];
       brr = Arrays.copyOf(arr,arr.length);

       Arrays.sort(brr);
       int[] a = new int[]{-1,-1};
       for (int i = 0;i<arr.length;i++){
           if(arr[i] != brr[i]){
               a[0] = i;
               break;
           }
       }

        for (int i = arr.length - 1;i>=0;i--){
            if(arr[i] != brr[i]){
                a[1] = i;
                break;
            }
        }
        
        return a;
    }
package xiaohongshu;

import java.util.Scanner;

public class main1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int k = sc.nextInt();
        int[] b = new int[k];
        for (int i = 0;i<k;i++){
            b[i] = sc.nextInt();
        }

        int[] c = new int[2];
        c= subSort(b);
        for (int i : c){
            System.out.println(i);
        }
    }
    public static int[] subSort(int[] arr) {
        if(arr == null||arr.length<=1)
            return new int[]{-1,-1};


        int right = -1;
        int left = -1;
        int max = -100;
        int min = 100;

        for(int i = 0;i<arr.length;i++){
            if (arr[i] <= max) {
                right = i;
            }else {
                max = Math.max(max,arr[i]);
            }

            if(arr[arr.length - 1 - i] >= min){
                left = arr.length - 1 - i;
            }else {
                min = Math.min(min,arr[arr.length - 1 - i]);
            }
        }
        int[] a = new int[2];
        a[0] = left;
        a[1] = right;
        return a;
    }
}

2.给定一个二维数组,找出没出现的最小的自然数
例如:1,2,3 ,5
输出:4

  static int findMin(int[][] arr) {
        int n = arr.length;
        int m = arr[0].length;

        int[] a = new int[n*m];
        int k = 0;
        for(int i = 0;i<n;i++){
            for(int j = 0;j<m;j++){
                a[k++] = arr[i][j];
            }
        }
        Arrays.sort(a);

        int i= 0;
        for(i = 0;i<a.length;i++){
            if(a[i]!=i+1){
                return i+1;
            }
        }

        return i;
    }

3.距离终点X,船舶最小移动距离为l,最大距离为t,然后有n个危险点,求船舶在危险区停留的最少次数
蹲一个大佬代码…

猜你喜欢

转载自blog.csdn.net/weixin_45773603/article/details/108437193