[学习报告]《LeetCode零基础指南》(第六讲) C排序API

x33g5p2x  于2021-11-27 转载在 其他  
字(1.9k)|赞(0)|评价(0)|浏览(206)

第一题:912. 排序数组

不花里胡哨直接上。

class Solution {
    public int[] sortArray(int[] arr) {
        Arrays.sort(arr);
        return arr;
}}

第二题:169. 多数元素

class Solution {
    // 摩尔投票法
    public int majorityElement(int[] nums) {
        int res = 0, count = 0;
        for (int i = 0; i < nums.length; i++) {
            if (count == 0) {
                res = nums[i];
                count++;
            }
            else {
                if (res == nums[i]) count++;
                else count--;
            }
        }
        return res;
    }
}

第三题:217. 存在重复元素

class Solution {

  public boolean containsDuplicate(int[] nums) {
      //比较相邻的元素是否相同即可
         Arrays.sort(nums);
         for(int i=0;i<nums.length-1;i++){
              if(nums[i]==nums[i+1]){
                  return true;
              }
         }
         return false;

}}

第四题:164. 最大间距

class Solution {
    public int maximumGap(int[] nums) {
        Arrays.sort(nums);
        int max=0;
        if(nums.length==1){return 0;}
        for(int i=0;i<nums.length-1;i++){
            int count=nums[i+1]-nums[i];//一组一组赋值一组一组的比
             max=max>count?max:count;
        }
        return max;
    }
}

第五题:905. 按奇偶排序数组

class Solution {
    public int[] sortArrayByParity(int[] nums) {
        int len=nums.length;
        int []arr=new int[len];
        for(int i=0,j=0,k=0;i<len;i++){//奇数从后面加,偶数从前加
            if(nums[i]%2==0){
                arr[j]=nums[i];
                j++;
            }
            else {
               arr[len-1-k]=nums[i]; 
               k++;
            }
        }
        return arr;

    }
}

第六题:539. 最小时间差

这题不会....看评论区的

class Solution {
    public int findMinDifference(List<String> timePoints) {
        int n=timePoints.size();
        if(n>1440){
            return 0;
        }
        int[] times=new int[n];
        // 将时间全部转化为分钟
        for(int i=0;i<n;i++){

            String m=timePoints.get(i).substring(0,2);
            String s=timePoints.get(i).substring(3,5);
            times[i]=Integer.parseInt(m)*60+Integer.parseInt(s);
        }
        int result=Integer.MAX_VALUE;
        
        for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++){
                // 两个时间最小时间
                int time=Math.min(Math.abs(times[i]-times[j]),Math.abs(Math.abs(times[i]-times[j])-1440));
                // 所有时间最小差
                result=Math.min(time,result);

            }
        }
        return result;

    }
}

第七题:976. 三角形的最大周长

class Solution {//贪心算法
    public int largestPerimeter(int[] nums) {
        Arrays.sort(nums);
        for(int  i = nums.length-1; i>=2;i--){
            if(nums[i-2] + nums[i-1] > nums[i]) 
            return (nums[i-2]+nums[i-1]+nums[i]); 
        }
        return 0;
    }
}

第八题:881. 救生艇

class Solution {
    public int numRescueBoats(int[] people, int limit) {
        Arrays.sort(people);
        int n = people.length;
        int i = 0, j = n - 1;
        while (i < j) {
            if (people[j] + people[i] <= limit) {
                i++;//成对走
            }
            j--;
        }//最多次数减去成对次数
        return n - i;
    }
}

相关文章