第一题: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; } }