写在前面
void shellsort(vector<int>&n,int len) {
for(int k=len/2;k>0;k/=2) {
for(int i=k;i<len;i++) {
int t=n[i],j;
for(j=i;j>=k;j-=k) {
if(t<n[j-k]) n[j]=n[j-k];
else break;
}
n[j]=t;
}
}
}
912. 排序数组
class Solution {
public:
void shellsort(vector<int>&n,int len) {
for(int k=len/2;k>0;k/=2) {
for(int i=k;i<len;i++) {
int t=n[i],j;
for(j=i;j>=k;j-=k) {
if(t<n[j-k]) n[j]=n[j-k];
else break;
}
n[j]=t;
}
}
}
vector<int> sortArray(vector<int>& nums) {
shellsort(nums,nums.size());
return nums;
}
};
169. 多数元素
class Solution {
public:
void shellsort(vector<int>&n,int len) {
for(int k=len/2;k>0;k/=2) {
for(int i=k;i<len;i++) {
int t=n[i],j;
for(j=i;j>=k;j-=k) {
if(t<n[j-k]) n[j]=n[j-k];
else break;
}
n[j]=t;
}
}
}
int majorityElement(vector<int>& nums) {
shellsort(nums,nums.size());
return nums[nums.size()/2];
}
};
217. 存在重复元素
class Solution {
public:
void shellsort(vector<int>&n,int len) {
for(int k=len/2;k>0;k/=2) {
for(int i=k;i<len;i++) {
int t=n[i],j;
for(j=i;j>=k;j-=k) {
if(t<n[j-k]) n[j]=n[j-k];
else break;
}
n[j]=t;
}
}
}
bool containsDuplicate(vector<int>& nums) {
shellsort(nums,nums.size());
for(int i=1;i<nums.size();i++) {
if(nums[i]==nums[i-1]) return true;
}
return false;
}
};
164. 最大间距
class Solution {
public:
void shellsort(vector<int>&n,int len) {
for(int k=len/2;k>0;k/=2) {
for(int i=k;i<len;i++) {
int t=n[i],j;
for(j=i;j>=k;j-=k) {
if(t<n[j-k]) n[j]=n[j-k];
else break;
}
n[j]=t;
}
}
}
int maximumGap(vector<int>& nums) {
int ans=0;
shellsort(nums,nums.size());
for(int i=1;i<nums.size();i++) {
ans=max(ans,nums[i]-nums[i-1]);
}
return ans;
}
};