算法题:找出一个数组中依次最大的k个元素

package arithmetic;

import java.util.Arrays;

/**
 * 找出一个数组中依次最大的k个元素
 * @author SHI
 */
public class FindMaxFigure {
    public static void main(String[] args) {
        int[] a=new int[]{1,5,-1,8,0,2};
        System.out.println(Arrays.toString(findBigFigure(a, 3)));
    }

    /**
     * 想法:找到一个最大的元素之后,就依次存放到数组的最前面去,直到满足k个为止
     * @param a  原始数组
     * @param k
     * @return
     */
    public static int[] findBigFigure(int[] a,int k) {
        int[] temp = new int[k];
        int m = 0;
        int index = 0;

        for (; index < k; index++) {
            int max = a[index];//假设数组中的某个元素是最大的(这里每循环依次,取得的数组元素下标依次是0,1,2...)
            int flag = 0;

            for (int j = index+1; j < a.length; j++) {
                if(max < a[j]) {
                    max = a[j];
                    flag = j;//保存找到的最大数字的下标
                }
            }
            //将最大数字依次交换到数组的最前面
            int t = a[index];
            a[index] = a[flag];
            a[flag] = t;

            //将找到的数保存到数组中
            temp[m++] = max;
        }

        return temp;
    }
}
时间: 2024-12-23 11:36:29

算法题:找出一个数组中依次最大的k个元素的相关文章

1152: 零起点学算法59——找出一个数组中出现次数最多的那个元素

1152: 零起点学算法59--找出一个数组中出现次数最多的那个元素 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 990  Accepted: 532[Submit][Status][Web Board] Description 找出一个数组中出现次数最多的那个元素 Input 第一行输入一个整数n(不大于20) 第二行输入n个整数 多组数据 Output 找出n个整数中出现次数最多的那个整数(

找出一个数组中出现次数最多的那个元素

#include <stdio.h> int main() { int n,a[20],i,j,flag=0,max; int b[20]={0}; while(scanf("%d",&n)==1){ if(n==0) break; for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]==a[j]) b[i]++

程序员面试100题之十:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值(转)

能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解. 假如有如下的两个数组,如图所示: 5,6,1,4,7,9,8 给定Sum= 10 1,5,6,7,8,9 给定Sum= 10 分析与解法 这个题目不是很难,也很容易理解.但是要得出高效率的解法,还是需要一番思考的. 解法一 一个直接的解法就是穷举:从数组中任意取出两个数字,计算两者之和是否为给定的数字. 显然其时间复杂度为N(N-1)/2即O(N^2).这个算法很简

面试题1:找出一个数组中三个只出现一次的数字

version1: 找出一个数组中一个只出现一次的数字,其他数字都出现两次:将所有数字异或,得到的结果即为只出现一次的. version2: 找出一个数组中两个只出现一次的数字,其他数字都出现两次:将所有数字异或,得到的结果即为x=a^b, index为x中第一个为1的位,则a 和b中第index为必然有一个为1,有一个为0.据此将所有数据分为两组,一组的第index为都为1,另一组第index为都为0,第一组数字异或得到a,第二组数字异或得到b. 时间复杂度为o(n),空间复杂度为o(1).

算法试题 - 找出一个序列中出现频率最高的三个数

题目 找出一个序列中出现频率最高的三个数 解析 思路一 创建一个新字典, k 为 序列的值, 然后 v 的初始值 0, 然后循环序列进行计数, 然后进行新字典的处理..... 不行, 不好处理了. 此思路不行 思路二 利用 colletctions 的 Counter 模块, 内部有个方法可以解决 k 值问题 答案 答案一 可以往下继续实现, 但是有点麻烦了 li = [2, 5, 3, 4, 1, 8, 1, 2, 6, 6, 1, 5, 1, 5] d = dict.fromkeys(li,

算法题:找出一个数组中相加值最大的连续序列元素

package arithmetic; /** * @author SHI * 求一个数组中相加值最大的连续序列元素 */ public class MaxSequence { public static void main(String[] args) { int[] a=new int[]{-2,9,-3,4,-6,7,-6,4}; findBigSequence(a); } /** * 思想: (1)计算出该数组的所有元素和,假设该值为最大 * (2)从数组下标1到a.length-1依次

算法:找出有序数组中两数,它俩之和等于输入值

题目:已知按序排列的整数数组,输入任意数number,当数组中某两数之和等于number时,打印出两个数. 要求:复杂度为o(n) 解法: 数组已是有序排列,且两个加数一定满足条件:较小加数<= (number/2) <= 较大加数:那么只需要找出该数组的较小加数和较大加数分界index,以该分界为起点分别往左右两边逐个取值匹配. 若两数之和>number,说明较小加数还要再小,向数组的较小值方向移位取值与原较大值重新匹配. 若两数之和<number,说明较大加数还要再大,向数组的

找出一个字符串中最长重复次数的子字符串,并计算其重复次数

原题 找出一个字符串中最长重复次数的子字符串,并计算其重复次数.例如:字符串"abc fghi bc kl abcd lkm abcdefg",并返回"abcd"和2. 我的思路 为了方便表述,我们使用变量src作为原字符串,sub_str作为子字符串. 由于题目要求寻找至少重复2次的最长的子字符串,重点在于最长的子字符串,而不在于重复的最多次数.因此我们可以从长度最长的字符串入手,计算其重复次数.只要重复达到2次,即可返回该字符串. 显然长度最长的子字符串就是原串

[PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法

问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 collections.Counter 类 1. most_common(n)统计top_n from collections import Counter words = [ 'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes', 't