NC88 寻找第K大
题目链接
1、解题思路
- 把第K大转化为下标,然后利用快排,二分的思想解决。
2、代码
import java.util.*;
public class Solution {
private int theKthLarge(int[] arr,int l,int r,int k){
int i = l,j = r, base = arr[i];
while(i < j){
while(i < j && arr[j] >= base){
j--;
}
if(i < j){
arr[i++] = arr[j];
}
while(i < j && arr[i] <= base){
i++;
}
if(i < j){
arr[j--] = arr[i];
}
}
arr[i] = base;
if(i == k){
return base;
}else if(i > k){
return theKthLarge(arr,l,i-1,k);
}else{
return theKthLarge(arr,i+1,r,k);
}
}
public int findKth(int[] a, int n, int K) {
return theKthLarge(a,0,n-1,n-K);
}
}
NC61 两数之和
题目链接
1、解题思路
2、代码
import java.util.*;
public class Solution {
public int[] twoSum (int[] numbers, int target) {
int[] ret = new int[2];
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0;i < numbers.length;i++){
if(map.containsKey(target - numbers[i])){
ret[0] = map.get(target - numbers[i]);
ret[1] = i+1;
return ret;
}
map.put(numbers[i],i+1);
}
return ret;
}
}
NC33 合并两个排序的链表
1、解题思路
2、代码
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode dummy = new ListNode(0);
ListNode tail = dummy;
while(list1 != null || list2 != null){
if(list1 == null){
tail.next = list2;
break;
}else if(list2 == null){
tail.next = list1;
break;
}else if(list1.val < list2.val){
ListNode temp = list1;
list1 = list1.next;
tail.next = temp;
tail = tail.next;
}else{
ListNode temp = list2;
list2 = list2.next;
tail.next = temp;
tail = tail.next;
}
}
return dummy.next;
}
}