寻找第K大&&两数之和&&合并两个排序的链表

167 阅读1分钟

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) {
        // write code here
        return theKthLarge(a,0,n-1,n-K);
    }
}

NC61 两数之和

题目链接

1、解题思路
  • hash表
2、代码
import java.util.*;


public class Solution {
    /**
     * 
     * @param numbers int整型一维数组 
     * @param target int整型 
     * @return int整型一维数组
     */
    public int[] twoSum (int[] numbers, int target) {
        // write code here
        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 ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
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;
    }
}