LeetCode数组(一)

1.设计一个算法,找出数组中最小的k个数,并从小到大排序后输出。

思路:插入排序后新建数组存入前k个元素后返回。

class Solution {
    public int[] smallestK(int[] arr, int k) {
        int j;
        for(int i=1;i<arr.length;i++){
            int e=arr[i];
            for(j=i;j>0&&arr[j-1]>e;j--){
                arr[j]=arr[j-1];
            }
            arr[j] = e;
        }
        int[] result = new int[k]; 
        for(int i=0;i<k;i++){
            result[i]=arr[i];
        }
        return result;
    }
}

1351. 统计有序矩阵中的负数

思路:遍历数组找到则累计。

class Solution {
    public int countNegatives(int[][] grid) {
        int count = 0;
        for(int i=0;i<grid.length;i++){
            for(int j=0;j<grid[0].length;j++){
                if(grid[i][j]<0){
                    count++;
                }
            }
        }
        return count;
    }
}

35. 搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。

思路:设置一个指针如果找到直接返回索引。如果没找到,创建一个新数组长度比原来多1,先把所求数字存到末尾,把原来的数按顺序存入,遍历此数组,如果发现所找数字小于当前数字,直接返回当前角标,如果没找到,直接返回新数组的长度。

class Solution {
    public int searchInsert(int[] nums, int target) {
        int pointer=0;
        while(pointer<nums.length){
            if(nums [pointer] != target){
                pointer++;
            }else{
                return pointer;
            }
        }
        int[] arr = new int[nums.length+1];
        
        arr[nums.length] = target;
        for(int i=0;i<arr.length-1;i++){
            arr[i]=nums[i];
            if(target<arr[i])
            return i;
        }
        return nums.length;
    }
}

643. 子数组最大平均数 I

给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。

思路:i表示当前字串开始位置,j遍历当前字串,求和,然后算平均数,将每次的平均数进行比较,取最大的返回。

class Solution {
    public double findMaxAverage(int[] nums, int k) {
        double temp=0;
        if(nums.length==1){
            return nums[0];
        }
        for(int i=0;i<=nums.length-k;i++){//每次开始的地方
            double aver =0;//每次循环开始初值为0
            int sum = 0;
                for(int j=i;j<=i+k-1 ;j++){//遍历i~i+k-1
                        sum+=nums[j];//求和
                }
                aver+=sum*1.0/k;//平均
                temp = aver;//暂存
                if(aver>temp){
                temp = aver;
                }
        }
       return temp;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45111347/article/details/104460396