Skip to content

增加了[lcof-18.删除链表的节点]和[lcof-40.最小的k个数]的cpp解法 #345

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 14, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
优化[lcof-40.最小的k个数]格式
  • Loading branch information
junfeng.fj committed Feb 14, 2021
commit eda38254b66ac8c95ad2ecd1fe0453005e6e11bf
2 changes: 1 addition & 1 deletion lcof/面试题18. 删除链表的节点/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ public:
// 第一个就匹配的情况
return head->next;
}

while (cur && cur->next) {
if (cur->next->val == val) {
// 如果找到了,直接指向下一个
Expand Down
2 changes: 1 addition & 1 deletion lcof/面试题18. 删除链表的节点/Solution.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class Solution {
// 第一个就匹配的情况
return head->next;
}

while (cur && cur->next) {
if (cur->next->val == val) {
// 如果找到了,直接指向下一个
Expand Down
20 changes: 10 additions & 10 deletions lcof/面试题40. 最小的k个数/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,11 @@ public:
int r = end;
int povit = arr[begin];

while (l<r) {
while (l<r && arr[r]>=povit) {r--;}
while (l<r && arr[l]<=povit) {l++;}
if (l<r) {swap(arr[l], arr[r]);}
while (l < r) {
// 从右边开始,找到第一个小于povit的数字(用于交换)
while (l < r && arr[r] >= povit) { r--; }
while (l < r && arr[l] <= povit) { l++; }
if (l < r) { swap(arr[l], arr[r]); }
}

swap(arr[begin], arr[l]);
Expand All @@ -140,20 +141,19 @@ public:
// C++中,stl提供partial_sort()方法,就是这种实现方式
int mid = partition(arr, begin, end);
if (mid == target) {
// 如果正好排到target这一位,则表示已经前target已经是最小了
return;
} else if (target < mid) {
partSort(arr, begin, mid-1, target);
partSort(arr, begin, mid - 1, target);
} else {
partSort(arr, mid+1, end, target);
partSort(arr, mid + 1, end, target);
}

return;
}

vector<int> getLeastNumbers(vector<int>& arr, int k) {
partSort(arr, 0, arr.size()-1, k-1);
vector<int> ret(arr.begin(), arr.begin()+k);
partSort(arr, 0, arr.size() - 1, k - 1);
vector<int> ret(arr.begin(), arr.begin() + k);
return ret;
}
};
Expand Down
21 changes: 11 additions & 10 deletions lcof/面试题40. 最小的k个数/Solution.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@ class Solution {
int r = end;
int povit = arr[begin];

while (l<r) {
while (l<r && arr[r]>=povit) {r--;}
while (l<r && arr[l]<=povit) {l++;}
if (l<r) {swap(arr[l], arr[r]);}
while (l < r) {
// 从右边开始,找到第一个小于povit的数字(用于交换)
while (l < r && arr[r] >= povit) { r--; }
while (l < r && arr[l] <= povit) { l++; }
if (l < r) { swap(arr[l], arr[r]); }
}

swap(arr[begin], arr[l]);
Expand All @@ -26,17 +27,17 @@ class Solution {
if (mid == target) {
return;
} else if (target < mid) {
partSort(arr, begin, mid-1, target);
partSort(arr, begin, mid - 1, target);
} else {
partSort(arr, mid+1, end, target);
partSort(arr, mid + 1, end, target);
}

return;
}

vector<int> getLeastNumbers(vector<int>& arr, int k) {
partSort(arr, 0, arr.size()-1, k-1);
vector<int> ret(arr.begin(), arr.begin()+k);
partSort(arr, 0, arr.size() - 1, k - 1);
vector<int> ret(arr.begin(), arr.begin() + k);
return ret;
}
};
};