提交 e85b477e 编写于 作者: Super algorithm's avatar Super algorithm

Add new file

上级 2245934b
public class offerII_076 {//剑指 Offer II 076. 数组中的第 k 大的数字
public static void main(String[] args) {
int[] nums= {3,2,3,1,2,4,5,5,6};
int k = 4;
System.out.println(Solution076.findKthLargest(nums, k));
}
/* @Test
public static void testling() {
int[] a = {2, 3, 1, 5, 3, 4};
for (int i = 0; i < 6; i++) {
int k = i; //把目前要比的下标记录下
for (int j = i; j < 6; j++) {
if (a[k] > a[j]) {
int temp = a[k];
a[k] = a[j];
a[j] = temp;
}
}
}
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
}*/
}
//*********快速排序思想****************************
class Solution076 {
public static int findKthLargest(int[] nums, int k) {
int key=0;
int left=0;
int right= nums.length - 1;
quicksort1(nums,key,left,right,k-1);
return nums[k-1];
}
private static void quicksort1(int[] nums, int key, int left, int right, int k) {
if(left>right)
return;
key = partsort( nums, key, left, right);
if(key<k){
quicksort1(nums,key+1,key+1,right,k);
}else if(key==k){
return;
}else{
quicksort1(nums,left,left,key-1,k);
}
}
private static int partsort(int[] nums, int key, int left, int right) {
int slow=key+1;
int fast=key+1;
int temp;
while (fast<=right){
if(nums[fast]>=nums[key]){
temp=nums[slow];
nums[slow]=nums[fast];
nums[fast]=temp;
slow++;
}
fast++;
}
slow--;
temp=nums[key];
nums[key]=nums[slow];
nums[slow]=temp;
return slow;
}
}
//***********先排序************************************
/*
class Solution076 {
public static int findKthLargest(int[] nums, int k) {
//排序
// bobosort(nums);
//快速排序
fastsort(nums);
return nums[k-1];
}
private static void fastsort(int[] nums) {
int left=0,right= nums.length-1;
myquicksort(nums,left,right);
}
private static void myquicksort(int[] nums, int left, int right) {
if(left>right)
return;
int key=partsort(nums,left,right);
myquicksort(nums,left,key-1);
myquicksort(nums, key+1, right);
}
private static int partsort(int[] nums, int left, int right) {
int key=left;
while(left<right){
while(left<right&&nums[right]<=nums[key])
right--;
while(left<right&&nums[left]>=nums[key])
left++;
myswap(nums,left,right);
}
myswap(nums,key,left);
return left;
}
private static void myswap(int[] nums, int left, int right) {
int tem;
tem=nums[left];
nums[left]=nums[right];
nums[right]=tem;
}
public static int[] bobosort(int[] nums){
int tem;
for (int i = 0; i < nums.length-1; i++) {
for (int j = i+1; j < nums.length; j++) {
if(nums[i]<nums[j]){
tem=nums[i];
nums[i]=nums[j];
nums[j]=tem;
}
}
}
return nums;
}
}
*/
//**********k数组存*****************************************
/*
class Solution076 {
public static int findKthLargest(int[] nums, int k) {
int[] numk = new int[k];
int j=0;
for (int i = 0; i < nums.length; i++) {
if(i<k){
numk[i]=nums[i];
}else{
j=findKless(numk);
if(numk[j]<nums[i])
numk[j]=nums[i];
}
}
j=findKless(numk);
return numk[j];
}
public static int findKless(int[] nums){
int k=0;
for (int i = 1; i < nums.length; i++) {
if(nums[k]>nums[i])
k=i;
}
return k;
}
}*/
/*
// new
class Solution076 {
public static int findKthLargest(int[] nums, int k) {
int[] numk = new int[k];
int j=0;
int tag=1;
for (int i = 0; i < nums.length; i++) {
if(i<k){
numk[i]=nums[i];
}else{
if(tag==1){
j=findKless(numk);
tag=0;
}
if(numk[j]<nums[i]){
numk[j]=nums[i];
tag=1;
}
}
}
j=findKless(numk);
return numk[j];
}
public static int findKless(int[] nums){
int k=0;
for (int i = 1; i < nums.length; i++) {
if(nums[k]>nums[i])
k=i;
}
return k;
}
}*/
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册