找出一个数组中最小的K个元素

思路:看到这个题的第一瞬间我就想到了TreeSet,利用TreeSet在插入元素的时候会进行排序这一特性,这道题还有什么难度呢?遍历数组将所有元素存入TreeSet,然后再遍历TreeSet,取出需要的前K个元素即可。代码如下:


import java.util.TreeSet;
import java.util.ArrayList;

public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        if(k>input.length||input.length==0){
            return new ArrayList<Integer>();
        }
        TreeSet<Integer> treeSet = new TreeSet<Integer>();
        for(int i:input){
            treeSet.add(i);
        }
        ArrayList<Integer> list = new ArrayList<Integer>();
        int count=0;
        for(int i:treeSet){
            if(count==k){
                break;
            }
            list.add(i);
            count++;
        }
        return list;
    }
}


在C语言,要找出二维数组中最小的十个数,我们可以使用选择排序算法的思想,通过不断选择剩余元素最小值并将其放置在数组的前十个位置来实现。以下是实现这一功能的步骤和一个简单的代码示例: 步骤如下: 1. 假设二维数组的大小为 m x n,并且我们只需要找出最小的十个数,那么我们只需要操作数组的前十个元素即可。 2. 将前十个元素视为一个待排序的序列。 3. 在这个序列进行选择排序,每次从未排序的部分选出最小元素,与未排序部分的第一个元素交换位置。 4. 经过九次这样的选择和交换,前十个元素即为最小的十个数。 下面是一个简单的代码示例: ```c #include <stdio.h> #include <limits.h> // 用于INT_MAX void findTenMin(int arr[][n], int m, int n) { int minIndex, temp; for (int i = 0; i < 10; i++) { minIndex = i; for (int j = i + 1; j < n; j++) { if (arr[i][j] < arr[i][minIndex]) { minIndex = j; } } // 交换元素位置 for (int k = 0; k < m; k++) { temp = arr[k][i]; arr[k][i] = arr[k][minIndex]; arr[k][minIndex] = temp; } } } int main() { int m = 5; // 行数 int n = 5; // 列数,假设我们要找最小的十个数,n >= 10 int arr[m][n] = { {22, 34, 3, 32, 82}, {2, 34, 32, 82, 50}, {45, 7, 8, 66, 55}, {47, 12, 1, 21, 33}, {11, 5, 45, 65, 18} }; findTenMin(arr, m, n); printf("The smallest ten numbers are:\n"); for (int i = 0; i < 10; i++) { printf("%d ", arr[i][i]); } printf("\n"); return 0; } ``` 需要注意的是,以上代码假设我们只需要找最小的十个数,且这些数位于二维数组的前十个位置。如果最小的十个数分布在整个二维数组中,那么需要对整个数组进行排序,并从选取前十个最小值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值