lintcode刷题记录合并排序数组 java
2017-12-14 22:48
260 查看
在数组中找到第k大的元素
注意事项
你可以交换数组中的元素的位置
给出数组
给出数组
你的输入
你的输出
期望答案
class Solution {
/*
* @param k : description of k
* @param nums : array of nums
* @return: description of return
*/
public int kthLargestElement(int k, int[] nums) {
// write your code here
if(k > nums.length){
return -1;
}else{
//bubbleSort(nums);//冒泡排序
quickSort(nums, 0, nums.length-1);
return nums[k-1];
}
}
//冒泡排序没过审核,5555555就会这一个
public static void bubbleSort(int[] nums){
for(int i=0; i<nums.length; i++){
for(int j=i+1; j<nums.length; j++){
if(nums[i] < nums[j]){
int temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
}
}
}
}
//快速排序
public static void quickSort(int[] nums, int start, int end){
if(start < end){
int position = partition(nums, start, end);
quickSort(nums, start, position-1);
quickSort(nums, position+1, end);
}
}
//快速排序分区从大到小排列
public static int partition(int[] nums, int start, int end){
//快速排序选择基数三种方式:固定选值;随机选值;三数取中
//三数取中
int mid = start + (end - start)/2;
if(nums[mid] < nums[end]){
swap(nums[mid], nums[end]);
}
if(nums[start] < nums[end]){
swap(nums[start], nums[end]);
}
if(nums[mid] < nums[start]){
swap(nums[mid], nums[start]);
}
int key = nums[start];
while(start<end){
while(nums[end]<=key && start<end){
end--;
}
nums[start] = nums[end];
while(nums[start]>=key && start<end){
start++;
}
nums[end] = nums[start];
}
nums[end] = key;
return end;
}
public static void swap(int a, int b){
int temp = a;
a = b;
b = temp;
}
};
注意事项
你可以交换数组中的元素的位置
给出数组
[9,3,2,4,8],第三大的元素是
4
给出数组
[1,2,3,4,5],第一大的元素是
5,第二大的元素是
4,第三大的元素是
3,以此类推
你的输入
3 [9,3,2,4,8]
你的输出
4
期望答案
4
class Solution {
/*
* @param k : description of k
* @param nums : array of nums
* @return: description of return
*/
public int kthLargestElement(int k, int[] nums) {
// write your code here
if(k > nums.length){
return -1;
}else{
//bubbleSort(nums);//冒泡排序
quickSort(nums, 0, nums.length-1);
return nums[k-1];
}
}
//冒泡排序没过审核,5555555就会这一个
public static void bubbleSort(int[] nums){
for(int i=0; i<nums.length; i++){
for(int j=i+1; j<nums.length; j++){
if(nums[i] < nums[j]){
int temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
}
}
}
}
//快速排序
public static void quickSort(int[] nums, int start, int end){
if(start < end){
int position = partition(nums, start, end);
quickSort(nums, start, position-1);
quickSort(nums, position+1, end);
}
}
//快速排序分区从大到小排列
public static int partition(int[] nums, int start, int end){
//快速排序选择基数三种方式:固定选值;随机选值;三数取中
//三数取中
int mid = start + (end - start)/2;
if(nums[mid] < nums[end]){
swap(nums[mid], nums[end]);
}
if(nums[start] < nums[end]){
swap(nums[start], nums[end]);
}
if(nums[mid] < nums[start]){
swap(nums[mid], nums[start]);
}
int key = nums[start];
while(start<end){
while(nums[end]<=key && start<end){
end--;
}
nums[start] = nums[end];
while(nums[start]>=key && start<end){
start++;
}
nums[end] = nums[start];
}
nums[end] = key;
return end;
}
public static void swap(int a, int b){
int temp = a;
a = b;
b = temp;
}
};
相关文章推荐
- lintcode刷题记录合并排序数组 java
- 【Java】两个排序后的数组A和B,其中A的末端有足够的缓冲容纳B。编写一个方法,将B合并入A并排序。
- 利用扩展符排序合并数组,记录下来分享给大家
- 两个有序数组的合并排序,Java代码实现,并去重复,考虑空间利用率问题
- 剑指OFFER(java)-合并两个已排序的数组
- 【LeetCode-面试算法经典-Java实现】【088-Merge Sorted Array(合并排序数组)】
- java学习记录——使用Arrays.sort对数组进行升序排序
- Java实现-合并排序数组
- Java将两排序数组合并
- java基础学习记录之数组选择排序的学习与练习二
- 【Java实现】给出两个整型数组,将他们合并后从小到大排序并输出
- java基础学习记录之数组冒泡排序的学习与练习三
- 剑指offer面试题java实现之题4之相关题目:两个排序数组合并
- 对数组进行排序,并记录下标值的Java实现
- java中合并无序数组并进行排序
- 两个有序数组的合并排序,Java代码实现,并去重复,考虑空间利用率问题
- java等各种语言数组排序方法
- java数组选择排序
- 剑指Offer面试题38(Java版):数字在排序数组中出现的次数
- 栋哥带你学Java数组排序和二分查找