Leetcode题库-数组中的第K个最大元素(java语言版)
2019-02-27 20:49
253 查看
题目描述:
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [code][3,2,1,5,6,4] 和k = 2 输出: 5 [/code]
示例 2:
输入: [code][3,2,3,1,2,4,5,5,6] 和k = 4 输出: 4[/code]
说明:
你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
这道题的思路题目说的很明确在数组排序后的第k大的值。首先的进行数组排序,有好多排序方法,也可用内置的排序函数,都可以,这篇博客我用的是选择排序,在我上一篇博客颜色分类用是冒泡排序,具体:https://blog.csdn.net/weixin_37850160/article/details/87988889
然后怎么求第k大的值呢,其实在排好序之后很简单,从大到小排序完后,数组末尾的数就是最大的数,也就是第一大的数,那么第k大的数,只要这个末尾数的下标减去这个k得到的那个数在加上1(听起来很绕口,其实就是数组长度减去k(因为第一大的数就是末尾数。末尾数等于数组长度减1),例如,1,2,3,4,第二大的数是3,用4-2=2刚好是3的下标。(数组下标是从0开始到数组长度减一))
具体代码:
[code] public void findKthLargest(int[] nums, int k) { //先排序(选择排序(用内置排序,冒泡排序,都可以,我想自己练练选择排序)) int t; for (int i=0;i<nums.length-1;i++){//每次讲min置成无序组起始位置元素下标 int min=i; for (int j = i+1;j<nums.length;j++){//遍历无序组,找到最小元素。 if (nums[min]>nums[j]){ min=j; } } //找到最小元素后,判断是不是未排序起始位置的那个元素,是的话就不做操作,不是的话就交换 if (min!=i){ t = nums[i]; nums[i] = nums[min]; nums[min]=t; } } // 按照从小到大排序完后,末尾就是第一大的数,求第k大的数,只需要,减去k即可。(注意:数组下标从0开始。数组长度等于末尾下标加一) System.out.print(nums[nums.length-k]); } public static void main(String[] args){ int a[] = new int[]{3,2,3,1,2,4,5,5,6}; int k = 4; 数组中第k个最大元素 find = new 数组中第k个最大元素 (); find.findKthLargest ( a,k ); }
执行结果:
执行用时:
总结:这道题的思路就是排序后从后面最大的那个数如果查找即可。时间复杂度跟排序方法有很大的关系。后面慢慢会更新其他的排序方法。
2018-2-27
相关文章推荐
- [Leetcode] 215. 数组中的第K个最大元素 java
- Leetcode题库 - 长度最小的子数组(java语言版)
- Leetcode题库 - 两个数组的交集2(java语言版)
- LeetCode215. python实现:数组中的第K个最大元素问题☆☆
- Leetcode题库 - 两个数组的交集(java语言版)
- Leetcode题库 - 存在重复元素(java语言版)
- Leetcode题库-存在重复元素2(java语言版)
- Leetcode题库-存在重复元素3(java语言版)
- 【PHP解法==LeetCode对撞指针类型问题】11. 盛最多水的容器 && 215.数组中的第K个最大元素
- Leetcode题库-两数之和 II - 输入有序数组(java语言版)
- LeetCode题解 | 215. 数组中的第K个最大元素
- Leetcode题库-删除排序数组中的重复项 II(java语言版)
- Leetcode题库 ----合并两个有序数组(java语言版)
- Java--给定两个有序的数组,长度分别为m和n,求这两个数组中的第K个元素。
- java__给定一个非负整数数组,假定你的初始位置为数组第一个下标。 数组中的每个元素代表你在那个位置能够跳跃的最大长度。 请确认你是否能够跳跃到数组的最后一个下标。
- JAVA :在给定一个数组中,可以取得多个连续的子串。在众多子串中,求各元素和为最大值的连续子串!
- Java从键盘中读取一串数字存入数组,并返回元素组成的最大数
- java找出一个数组中出现次数最多且最大的那个元素
- 【LeetCode-面试算法经典-Java实现】【026-Remove Duplicates from Sorted Array(删除排序数组中的重复元素)】
- [LeetCode] House Robber II 求循环数组中元素两两不相邻的子序列最大和