> 文档中心 > 【学习报告】《LeetCode零基础指南》(第五讲) 排序API

【学习报告】《LeetCode零基础指南》(第五讲) 排序API

目录

一、练习题目

912. 排序数组

169.多数元素

217.存在重复元素

164.最大间距

905.按奇偶排序数组

539.最小时间差

976.三角形的最大周长

881.救生艇

二、答题总结


一、练习题目

912. 排序数组

给你一个整数数组 nums,请你将该数组升序排列。

示例 1:

输入:nums = [5,2,3,1]
输出:[1,2,3,5]
示例 2:

输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]

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

169.多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入:[3,2,3]
输出:3
示例 2:

输入:[2,2,1,1,1,2,2]
输出:2

class Solution {    public int majorityElement(int[] nums) { Arrays.sort(nums); return nums[(nums.length)/2];    }}

217.存在重复元素

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

示例 1:

输入:nums = [1,2,3,1]
输出:true
示例 2:

输入:nums = [1,2,3,4]
输出:false
示例 3:

输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true

class Solution {    public boolean containsDuplicate(int[] nums) { Set res = new HashSet(); for(int i:nums)     res.add(i); return res.size()<nums.length?true:false;    }}

164.最大间距

给定一个无序的数组 nums,返回 数组在排序之后,相邻元素之间最大的差值 。如果数组元素个数小于 2,则返回 0 。

您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。

示例 1:

输入: nums = [3,6,9,1]
输出: 3
解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。
示例 2:

输入: nums = [10]
输出: 0
解释: 数组元素个数小于 2,因此返回 0。

class Solution {    public int maximumGap(int[] nums) { int n=nums.length; if(n<2){     return 0; } Arrays.sort(nums); int max=0; for(int i=1;i=max){  max=nums[i]-nums[i-1];     } } return max;    }}

905.按奇偶排序数组

给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。

你可以返回满足此条件的任何数组作为答案。

示例:

输入:[3,1,2,4]
输出:[2,4,3,1]
输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。

class Solution {    public int[] sortArrayByParity(int[] nums) { int[] arr=new int[nums.length]; int left=0; int right=nums.length-1; for(int n:nums){     if(n % 2==0){  arr[left++]=n;     }else{  arr[right--]=n;     } } return arr;    }}

539.最小时间差

给定一个 24 小时制(小时:分钟 "HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。

示例 1:

输入:timePoints = ["23:59","00:00"]
输出:1
示例 2:

输入:timePoints = ["00:00","23:59","00:00"]
输出:0

class Solution {    public int findMinDifference(List timePoints) {  int[] arr = new int[timePoints.size()]; for (int i = 0; i < arr.length; i++) {     arr[i] = Integer.parseInt(timePoints.get(i).substring(0, 2)) * 60 + Integer.parseInt(timePoints.get(i).substring(3)); } Arrays.sort(arr); int min =99999; for (int i = 1; i < arr.length; i++) {     min = Math.min(min, arr[i] - arr[i - 1]); } return Math.min(min, arr[0] + 1440 - arr[arr.length - 1]);    }}

976.三角形的最大周长

给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。

示例 1:

输入:nums = [2,1,2]
输出:5
示例 2:

输入:nums = [1,2,1]
输出:0

class Solution {    public int largestPerimeter(int[] nums) { Arrays.sort(nums); int n=nums.length-1;  for(int i = n ;i >= 2; i--) {     int a = nums[i];     int b = nums[i - 1];     int c = nums[i - 2];     if(a < b + c){  return a + b + c;     } } return 0;    }}

881.救生艇

给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。

每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。

返回 承载所有人所需的最小船数 。

示例 1:

输入:people = [1,2], limit = 3
输出:1
解释:1 艘船载 (1, 2)
示例 2:

输入:people = [3,2,2,1], limit = 3
输出:3
解释:3 艘船分别载 (1, 2), (2) 和 (3)
示例 3:

输入:people = [3,5,3,4], limit = 5
输出:4
解释:4 艘船分别载 (3), (3), (4), (5)

class Solution {    public int numRescueBoats(int[] people, int limit) { int res = 0; int right = people.length - 1; int left = 0; Arrays.sort(people); while (left  limit) {  res++;  right--; // 先载最重的, 而且最小的也无法一起载,那么就最重的单独走     }     else {  res++;  right--; // 最重的与最轻的一起走  left++;     } } return res;    }}

二、答题总结

        感谢Java中的sort()函数对今天排序的重大贡献,今天后面题目有看题解,但保证都搞明白了。

        今天有学会了怎么使用HashSet,又是一个老师讲过但没用过系列,知道了一些eclipse中的快捷键,如:"shift+alt+s"(快速建立set、get...),"alt+/"(快速补全代码)

        又加强了对“双指针”的应用了解,之前做过的题要回顾一下了,感觉一些方法有点忘了,我这颗小菜菜什么时候可以长出“菜花”啊!

        注意:三目运算符的使用(好像是叫这个)、Integer.parseInt()函数是将字符串转化为整型的、list.get(i)是返回i处索引、substring()函数是截取出来(前闭后开区间)。

冰雪之城