class Solution {
public int lengthOfLongestSubstring(String s) {
int len=s.length();
int []num=new int[300];
int ans=0;
for(int i=0,j=0;i<len;i++)
{
num[s.charAt(i)]++;
while(num[s.charAt(i)]>1)
{
num[s.charAt(j)]--;
j++;
}
ans=Math.max(ans,i-j+1);
}
return ans;
}
}
手写输入输出模式
java复制代码
import java.util.*;
public class Javaacm
{
public static void main(String []args)
{
//输入:abadsadas
Scanner scan=new Scanner(System.in);
String s=scan.next();
int len=s.length();
int ans=0;
int num[]=new int[300];
for(int i=0,j=0;i<len;i++)
{
num[s.charAt(i)]++;
while(num[s.charAt(i)]>1)
{
num[s.charAt(j)]--;
j++;
}
ans=Math.max(ans,i-j+1);
}
System.out.println(ans);
}
}
class Solution {
public int findKthLargest(int[] nums, int k) {
Queue<Integer> q=new PriorityQueue<>();
for(int i=0;i<nums.length;i++)
{
q.add(nums[i]);
if(q.size()>k)
{
q.poll();
}
}
return q.poll();
}
}
手写输入输出
java复制代码
import java.util.*;
public class Javaacm
{
public static void main(String []args)
{
//输入:
//[3,2,1,5,6,4]
//3
Scanner scanner=new Scanner(System.in);
String s=scanner.next();
int k=scanner.nextInt();
String str[]=s.substring(1,s.length()-1).split(",");
Queue<Integer> q=new PriorityQueue<>();
for(int i=0;i<str.length;i++)
{
int cur=Integer.valueOf(str[i]);
q.add(cur);
if(q.size()>k)
{
q.poll();
}
}
System.out.print(q.poll());
}
}
快速选择算法
核心代码模式
java复制代码
class Solution {
int nums[];
public int findKthLargest(int[] num, int k) {
nums=num;
int n=nums.length;
return f(0,n-1,n-k);
}
void swap(int i,int j)
{
int t=nums[i];
nums[i]=nums[j];
nums[j]=t;
}
int f(int l,int r,int k)
{
if(l>=r)return nums[k];
int x=nums[l],i=l-1,j=r+1;
while(i<j)
{
do i++;while(nums[i]<x);
do j--;while(nums[j]>x);
if(i<j)swap(i,j);
}
if(k<=j)return f(l,j,k);
return f(j+1,r,k);
}
}
手写输入输出
java复制代码
import java.util.*;
public class Javaacm
{
static int nums[];
public static void main(String []args)
{
//输入:
//[3,2,1,5,6,4]
//3
Scanner scanner=new Scanner(System.in);
String s=scanner.next();
int k=scanner.nextInt();
String str[]=s.substring(1,s.length()-1).split(",");
nums=new int[str.length];
for(int i=0;i<str.length;i++)
nums[i]=Integer.valueOf(str[i]);
System.out.print(quickselect(0,nums.length-1,nums.length-k));
}
static int quickselect(int l,int r,int k)
{
if(l>=r)return nums[k];
int x=nums[l],i=l-1,j=r+1;
while(i<j)
{
do i++;while(nums[i]<x);
do j--;while(nums[j]>x);
if(i<j)swap(i,j);
}
if(k<=j)return quickselect(l,j,k);
return quickselect(j+1,r,k);
}
static void swap(int a,int b)
{
int t=nums[a];
nums[a]=nums[b];
nums[b]=t;
}
}