Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Super algorithm
算法
提交
e85b477e
算
算法
项目概览
Super algorithm
/
算法
通知
15
Star
1
Fork
10
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
算
算法
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e85b477e
编写于
3月 23, 2023
作者:
Super algorithm
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add new file
上级
2245934b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
209 addition
and
0 deletion
+209
-0
leetcode/leetcode/offerII_076.java
leetcode/leetcode/offerII_076.java
+209
-0
未找到文件。
leetcode/leetcode/offerII_076.java
0 → 100644
浏览文件 @
e85b477e
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录