题目一
1. 描述
For a array of integer X_i, 0 <= i <= N, solve for the value of max(X_i - X_j) for all i > j
for example: [1,2,3,4,5] -> 4; [5,4,3,2,1] -> -1
(Ideal time complexity is O(N) )
2. 代码
int get_max_diff(std::vector<int> list) {
int min_val = INT_MAX;
int max_diff = INT_MIN;
for(int i = 0; i < list.size(); i++){
if(list[i] < min_val){
min_val = list[i];
}
else{
if(list[i] - min_val > max_diff){
max_diff = list[i] - min_val;
}
}
return max_diff;
}
}
题目二
1. 描述
数据去重:有一结构体代表用户数据,包含两个域:id和name。先需要实现函数,完成以下两种功能:输入一个用户数据结构体的vector,返回另一个vector,可以按id或按name去重。按id去重的含义为:如果有id重复的多个数据,只保留其中的任意一个。
struct User {
unsigned int id;
std::string name;
};
2. 代码
#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;
struct User
{
unsigned int id;
std::string name;
};
class Solution
{
public:
vector<User> get_unique_user(vector<User> &list, bool use_id){
vector<User> res;
if(use_id){
unordered_map<int, string> map_s;
for(int i = 0; i < list.size(); i++){
map_s[list[i].id] = list[i].name;
}
for(auto it = map_s.begin(); it != map_s.end(); it++){
User item;
item.id = it->first;
item.name = it->second;
res.push_back(item);
}
}
else{
unordered_map<string, int> map_s;
for(int i = 0; i < list.size(); i++){
map_s[list[i].name] = list[i].id;
}
for(auto it = map_s.begin(); it != map_s.end(); it++){
User item;
item.id = it->second;
item.name = it->first;
res.push_back(item);
}
}
// cout << res.size() << endl;
// cout << map_s.size() << endl;
return res;
}
};
int main(int argc, char const *argv[])
{
vector<User> list;
User item;
item.id = 1;
item.name = "deng";
list.push_back(item);
item.id = 1;
item.name = "wang";
list.push_back(item);
item.id = 2;
item.name = "wang";
list.push_back(item);
Solution sol;
vector<User> res = sol.get_unique_user(list, false);
for(auto a : res){
cout << a.id << "," << a.name << endl;
}
cout << list.size() << "," << res.size() << endl;
return 0;
}