滴滴笔试编程

最大连续子序列

import java.util.Scanner;


public class Main {


    public static void main(String[] args) {

        Scanner scanner= new Scanner(System.in);


        String str = scanner.nextLine();

        String [] arr = str.split(" ");

        int [] array = new int[arr.length];

        for (int i = 0; i < arr.length; i++) {

            array[i] = Integer.parseInt(arr[i]);

        }


        System.out.println(findGreatestSumOfSubArray(array));


    }

    public static int findGreatestSumOfSubArray(int[] array) {

        if(array.length==0)

            return 0;

        else{

            int total=array[0],maxSum=array[0];

            for(int i=1;i<array.length;i++){

                if(total>=0)

                    total+=array[i];

                else

                    total=array[i];

                if(total>maxSum)

                    maxSum=total;

            }

            return maxSum;

        }


    }

}



无序数组找到第K大的数

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;


public class Main {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        String[] ss = in.nextLine().split(" ");

        int[] array = new int[ss.length];

        for(int i =0;i<ss.length;i++) {

            array[i]=Integer.parseInt(ss[i]);

        }

        int K = in.nextInt();


        System.out.println( findKthLargest(array,K));


    }


    public static int findKthLargest(int[] nums, int k) {

        if (k < 1 || nums == null) {

            return 0;

        }

        return getKth(nums.length - k + 1, nums, 0, nums.length - 1);

    }

    public static int getKth(int k, int[] nums, int start, int end) {

        int pivot = nums[end];

        int left = start;

        int right = end;

        while (true) {

            while (nums[left] < pivot && left < right) {

                left++;

            }

            while (nums[right] >= pivot && right > left) {

                right--;

            }

            if (left == right) {

                break;

            }

            swap(nums, left, right);

        }

        swap(nums, left, end);

        if (k == left + 1) {

            return pivot;

        } else if (k < left + 1) {

            return getKth(k, nums, start, left - 1);

        } else {

            return getKth(k, nums, left + 1, end);

        }

    }

    public static void swap(int[] nums, int n1, int n2) {

        int tmp = nums[n1];

        nums[n1] = nums[n2];

        nums[n2] = tmp;

    }

}

这个是有漏洞的,没考虑到重复数字的情况
发布了22 篇原创文章 · 获赞 25 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/chmodzora/article/details/77609041
今日推荐