018/LeetCode-80

/leetcode_80_删除排序数组中的重复元素.cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int removeDuplicates(vector<int>& nums) {
// 二分查找
if (nums.size() <= 1) {
return nums.size();
}
int left = 0, right = 1;
while (right < nums.size()) {
if (nums[left] != nums[right]) {
nums[++left] = nums[right];
}
++right;
}
return left + 1;
}

int main() {
vector<int> nums = {1, 1, 2};
cout << removeDuplicates(nums) << endl;
return 0;
}

/leetcode_35_搜索插入位置.cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int searchInsert(vector<int>& nums, int target) {
// 二分查找
int left = 0, right = nums.size() - 1;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
if (nums[left] >= target) {
return left;
} else {
return left + 1;
}
}

int main() {
vector<int> nums = {1, 3, 5, 6};
cout << searchInsert(nums, 5) << endl;
cout << searchInsert(nums, 2) << endl;
cout << searchInsert(nums, 7) << endl;
return 0;
}

/leetcode_283_移动零.cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

// 交换法
void moveZeroes(vector<int>& nums) {
int zeroCount = 0;
for (int i = 0; i < nums.size(); ++i) {
if (nums[i] == 0) {
zeroCount++;
} else if (zeroCount > 0) {
nums[i - zeroCount] = nums[i];
nums[i] = 0;
}
}
}

int main() {
vector<int> nums = {0, 1, 0, 3, 12};
moveZeroes(nums);
for (int n : nums) {
cout << n << " ";
}
cout << endl;
return 0;
}

/leetcode_169_多数元素.cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int majorityElement(vector<int>& nums) {
int count = 0, candidate = nums[0];
for (int i = 1; i < nums.size(); ++i) {
if (count == 0) {
candidate = nums[i];
count = 1;
} else if (candidate == nums[i]) {
++count;
} else {
--count;
}
}
count = 0;
for (int n : nums) {
if (n == candidate) {
++count;
}
}
if (count > nums.size() / 2) {
return candidate;
} else {
return -1;
}
}

int main() {
vector<int> nums = {2, 2, 1, 1, 1, 2, 2};
cout << majorityElement(nums) << endl;
return 0;
}

/leetcode_101_对称二叉树.cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

// 判断是否是对称的
bool isSymmetric(TreeNode* root) {
if (root == nullptr) {
return true;
}
return isEqual(root->left, root->right);
}

// 判断是否相等
bool isEqual(TreeNode* left, TreeNode* right) {
if (left == nullptr && right == nullptr) {
return true;
} else if (left == nullptr || right == nullptr) {
return false;
} else if (left->val != right->val) {
return false;
} else {
return isEqual(left->left, right->right) && isEqual(left->right, right->left);
}
}

int main() {
vector<int> nums = {1, 2, 2, 3, 4, 4, 3};
TreeNode* root = createTree(nums);
cout << isSymmetric(root) << endl;
return 0;
}

/leetcode_759_员工的重要性.cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int compare(vector<int>& v1, vector<int>& v2) {
if (v1[0] < v2[0]) {
return -1;
} else if (v1[0] == v2[0]) {
if (v1[1] > v2[1]) {
return 1;
} else {
return 0;
}
} else {
return 1;
}
}

int findRestaurant(vector<string>& list1, vector<string>& list2) {
// 两个集合的交集
vector<string> intersection;
if (list1.size() < list2.size()) {
for (int i = 0