1.504. Base 7

水题,直接写。但是我错了一次,忘了处理0的情况。 没有考虑边界条件。写完代码,一般需要自己想几个边界测试用例进行测试。

 class Solution {
public:
string convertTo7(int num) {
if(num == ) return "";
int a = abs(num);
string res;
while(a) {
int t = a % ;
a /= ;
res += char(t + '');
}
if(num < )
res += "-";
reverse(res.begin(), res.end());
return res; }
};

上面的abs好像没考虑最大的负数溢出问题,注意!题目数据范围小!

2. 513. Find Left Most Element

水题吧,记录一下,每一层的起始元素,返回最后一层的起始值。

 /**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int findLeftMostNode(TreeNode* root) {
queue<TreeNode*> q;
q.push(root);
int res = root->val;
while(!q.empty()) {
int sz = q.size();
res = q.front()->val;
while(sz--) {
TreeNode* t = q.front();
q.pop();
if(t->left) q.push(t->left);
if(t->right) q.push(t->right);
}
}
return res;
}
};

3. 515. Find Largest Element in Each Row

跟第二题一样,也算水题吧,每一层求解一下最大值。

 /**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> findValueMostElement(TreeNode* root) {
vector<int> res;
if(!root) return res;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()) {
int sz = q.size();
int d = INT_MIN;
while(sz--) {
TreeNode* t = q.front();
q.pop();
d = max(d, t->val);
if(t->left) q.push(t->left);
if(t->right) q.push(t->right);
}
res.push_back(d);
}
return res;
}
};

4. 493. Reverse Pairs

原题,你一定做过求逆序对的题目,就跟这个一模一样。但是,我还是花了一些时间。依稀记得,这道题,我是原模原样见过,在上算法课的时候,老师讲divide and conquer的作业题,我记得我做错了,当时差不多搞懂了,现在又不会了!还是当初没搞懂啊!

一种解法是mergesort,在merge的时候,求解个数,求逆序对很容易计算,跟排序的循环一起,但是这道题目就不一样,需要单独的循环计算这个特别的逆序对。在开启一个循环计算,复杂对一样,只是增加了一些系数的时间。

另一种解法是树状数组,(当然,线段树也可以),按顺序插入一个数,记当前数为a[i],统计大于2*a[i]的元素的个数,然后插入a[i]. 插入和计数可以用树状数组高效的维护。需要注意(看的第一名大神的写法):树状数组的下标非负,这题数据有负数,还有数据范围很大,需要离散化处理,但是,又有二倍的数,不好处理,可以使用map,负数的下标加上一个base偏移来解决。 这题的数据很大,二倍的数据会溢出int,算是一个很大的坑吧! 题目做的多了,应该一眼就能看到这题的考点,数据溢出!看前面的神牛,就一次没有错!

贴上我写的代码,(写的不是很好,可以参考排名靠前大神们的代码):

mergesort:

 typedef long long ll;
class Solution {
public:
int res;
vector<int> b;
void mg(vector<int> &a, int x, int mid, int y) { int i = x, j = mid + ;
int p = x;
for (int k = ; k < y - x + ; k++) {
if(i > mid) {
b[p] = a[j];
j++; p++;
continue;
}
if(j > y) {
b[p] = a[i];
p++;
i++;
continue;
}
if(a[i] <= a[j]) {
b[p] = a[i];
i++; p++;
} else {
b[p] = a[j];
p++; j++;
}
}
i = x; j = mid + ;
for (int k = ; k < y - x + ; k++) {
if(i > mid) break;
if(j > y) break;
ll td = a[j];
if(a[i] > * td) {
res += (mid + - i);
j++;
} else i++;
}
for (int k = x; k <= y; k++)
a[k] = b[k];
}
void mergesort(vector<int> &a, int left, int right) {
if(left >= right) return;
int mid = (left + right) / ;
mergesort(a, left, mid);
mergesort(a, mid + , right);
mg(a, left, mid, right);
}
int reversePairs(vector<int>& nums) {
res = ;
int n = nums.size();
if(n < ) return res;
b = nums;
mergesort(nums, , n - );
return res;
}

树状数组:

 typedef long long ll;
class Solution {
public:
int res;
map<ll, int> ma;
ll base = 1ll << ;
ll lowbit(ll x) {
return x & -x;
}
void add(ll x) {
x += base;
while(x <= 1ll << ) {
ma[x]++;
x += lowbit(x);
}
}
int ask(ll x) {
x += base;
int res = ;
while(x) {
res += ma[x];
x -= lowbit(x);
}
return res;
}
int reversePairs2(vector<int>& nums) {
res = ;
int n = nums.size();
if(n < ) return res;
ma.clear();
for (int i = n - ; i >= ; i--) {
res += ask(nums[i] - 1ll);
add(2ll * nums[i]);
}
return res;
}

LeetCode Weekly Contest 19的更多相关文章

  1. LeetCode Weekly Contest 8

    LeetCode Weekly Contest 8 415. Add Strings User Accepted: 765 User Tried: 822 Total Accepted: 789 To ...

  2. leetcode weekly contest 43

    leetcode weekly contest 43 leetcode649. Dota2 Senate leetcode649.Dota2 Senate 思路: 模拟规则round by round ...

  3. LeetCode Weekly Contest 23

    LeetCode Weekly Contest 23 1. Reverse String II Given a string and an integer k, you need to reverse ...

  4. Leetcode Weekly Contest 86

    Weekly Contest 86 A:840. 矩阵中的幻方 3 x 3 的幻方是一个填充有从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等. 给定一个 ...

  5. LeetCode Weekly Contest

    链接:https://leetcode.com/contest/leetcode-weekly-contest-33/ A.Longest Harmonious Subsequence 思路:hash ...

  6. 【LeetCode Weekly Contest 26 Q4】Split Array with Equal Sum

    [题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/split-array-with-equal-sum/ ...

  7. 【LeetCode Weekly Contest 26 Q3】Friend Circles

    [题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/friend-circles/ [题意] 告诉你任意两个 ...

  8. 【LeetCode Weekly Contest 26 Q2】Longest Uncommon Subsequence II

    [题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/longest-uncommon-subsequence ...

  9. 【LeetCode Weekly Contest 26 Q1】Longest Uncommon Subsequence I

    [题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/longest-uncommon-subsequence ...

随机推荐

  1. boost::mutex::scoped_lock

    在三维重建过程中,世界地图 Map &world作为唯一 访问/更新 对象,可以使用boost::mutex::scoped_lock . 一:boost::mutex::scoped_loc ...

  2. Windows Live Writer 历史Blog修改的功能

    其实 WLW 有历史Blog修改的功能,我只是一直没有找到,就在打开“最近发布的日志”里面, 位于屏幕的右侧“打开”列表下. 最近发现记忆力越来越差了,BLOG看来是必须的了.

  3. RN-第三方之react-native-pull 下拉刷新、上拉加载

    有一个很好的下拉刷新.上拉加载库:react-native-pull地址:https://github.com/greatbsky/react-native-pull-demo 使用 import { ...

  4. javascript匿名函数及闭包深入理解及应用

    1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种: ...

  5. es 存入失败错误

    {, 'error': {'type': 'illegal_argument_exception', 'reason': 'Rejecting mapping update to [bd_date] ...

  6. 今天写了一个简单的新浪新闻RSS操作类库

    今天,有位群友问我如何获新浪新闻列表相关问题,我想,用正则表达式网页中取显然既复杂又不一定准确,现在许多大型网站都有RSS集合,所以我就跟他说用RSS应该好办一些. 一年前我写过一个RSS阅读器,不过 ...

  7. C#学习笔记_04_流程控制

    04_流程控制 程序的执行结构: 顺序结构 分支结构 循环结构 可以通过某些特定的控制语句来控制代码的执行结构 分支流程控制 if else 基本语法 可以只有if没有else,但是不能没有if只有e ...

  8. 【2】数据采集 - urllib模块

    python2环境下关于urllib2的使用可以学习这篇文章.本文主要针对python3环境下使用urllib模块实现简单程序爬虫. 链接:https://www.jianshu.com/p/3183 ...

  9. 只读事务(@Transactional(readOnly = true))的一些概念

    念:从这一点设置的时间点开始(时间点a)到这个事务结束的过程中,其他事务所提交的数据,该事务将看不见!(查询中不会出现别人在时间点a之后提交的数据) 应用场合: 如果你一次执行单条查询语句,则没有必要 ...

  10. [bzoj1660][Usaco2006 Nov]Bad Hair Day_单调栈

    Bad Hair Day bzoj-1660 Usaco-2006 Nov 题目大意:n头牛站成一列,每头牛向后看.f[i]表示第i头牛到第n头牛之间有多少牛,使得这些牛都比i矮,且中间没有比i高的牛 ...