【今日打卡】《LeetCode零基础指南》(第六讲) C排序API
问题描述:
坚持就是胜利!
1.
给你一个整数数组 nums,请你将该数组升序排列。
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
sort(nums.begin(),nums.end());
return nums;
}
};
2.
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort (nums.begin(),nums.end());
return nums[nums.size()/2];
}
};
3.
给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> s;
for (int x: nums) {
if (s.count(x)) {
return true;
}
s.insert(x);
}
return false;
}
};
4.
给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。
如果数组元素个数小于 2,则返回 0。
class Solution {
public:
int maximumGap(vector<int>& nums) {
if (nums.size()<2) return 0;
sort(nums.begin(),nums.end());
int max=0;
for (int i=0;i<nums.size()-1;i++){
max=max>nums[i+1]-nums[i]?max:nums[i+1]-nums[i];
}
return max;
}
};
5.
给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。
你可以返回满足此条件的任何数组作为答案。
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& nums) {
int i=0,j=nums.size()-1;
while (i<j){
if ((nums[i]&1)==0) i++;
else if ((nums[j]&1)==1) j--;
else {
swap(nums[i],nums[j]);
}
}
return nums;
}
};
6.
给定一个 24 小时制(小时:分钟 "HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
class Solution {
public:
int getminutes (string a){
int h = (a[0]-48)*10+a[1]-48;
int min= (a[3]-48)*10+a[4]-48;
int res= 60*h+min;
return res;
}
int findMinDifference(vector<string>& timePoints) {
int minutes [timePoints.size()+1];
for (int i=0;i<timePoints.size();i++){
minutes[i]=getminutes(timePoints[i]);
}
sort (minutes,minutes+timePoints.size());
minutes[timePoints.size()]=minutes[0];
int minD=1440;
for (int i=0;i<timePoints.size();i++){
int dif=min(abs(minutes[i]-minutes[i+1]),abs(1440-minutes[i]+minutes[i+1]));
minD=minD<dif?minD:dif;
}
return minD;
}
};
7.
给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。
如果不能形成任何面积不为零的三角形,返回 0。
class Solution {
public:
int largestPerimeter(vector<int>& nums) {
sort (nums.begin(),nums.end());
int a=nums.size()-3;
while (a>=0){
if (nums[a]+nums[a+1]>nums[a+2]) return nums[a]+nums[a+1]+nums[a+2];
else {
a--;
}
}
return 0;
}
};
8.
第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。
每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。
返回载到每一个人所需的最小船数。(保证每个人都能被船载)。
class Solution {
public:
int numRescueBoats(vector<int>& people, int limit) {
sort (people.begin(),people.end());
int i=0,j=people.size()-1;
int ans = j+1;
if (i==j) return ans;
while (i<j){
int max = limit-people[i];
if (people[j]>max) j--;
else {
j--;
i++;
ans--;
}
}
return ans;
}
};
答
赞