1.504. Base 7

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

  1. class Solution {
  2. public:
  3. string convertTo7(int num) {
  4. if(num == ) return "";
  5. int a = abs(num);
  6. string res;
  7. while(a) {
  8. int t = a % ;
  9. a /= ;
  10. res += char(t + '');
  11. }
  12. if(num < )
  13. res += "-";
  14. reverse(res.begin(), res.end());
  15. return res;
  16.  
  17. }
  18. };

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

2. 513. Find Left Most Element

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

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8. * };
  9. */
  10. class Solution {
  11. public:
  12. int findLeftMostNode(TreeNode* root) {
  13. queue<TreeNode*> q;
  14. q.push(root);
  15. int res = root->val;
  16. while(!q.empty()) {
  17. int sz = q.size();
  18. res = q.front()->val;
  19. while(sz--) {
  20. TreeNode* t = q.front();
  21. q.pop();
  22. if(t->left) q.push(t->left);
  23. if(t->right) q.push(t->right);
  24. }
  25. }
  26. return res;
  27. }
  28. };

3. 515. Find Largest Element in Each Row

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

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8. * };
  9. */
  10. class Solution {
  11. public:
  12. vector<int> findValueMostElement(TreeNode* root) {
  13. vector<int> res;
  14. if(!root) return res;
  15. queue<TreeNode*> q;
  16. q.push(root);
  17. while(!q.empty()) {
  18. int sz = q.size();
  19. int d = INT_MIN;
  20. while(sz--) {
  21. TreeNode* t = q.front();
  22. q.pop();
  23. d = max(d, t->val);
  24. if(t->left) q.push(t->left);
  25. if(t->right) q.push(t->right);
  26. }
  27. res.push_back(d);
  28. }
  29. return res;
  30. }
  31. };

4. 493. Reverse Pairs

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

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

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

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

mergesort:

  1. typedef long long ll;
  2. class Solution {
  3. public:
  4. int res;
  5. vector<int> b;
  6. void mg(vector<int> &a, int x, int mid, int y) {
  7.  
  8. int i = x, j = mid + ;
  9. int p = x;
  10. for (int k = ; k < y - x + ; k++) {
  11. if(i > mid) {
  12. b[p] = a[j];
  13. j++; p++;
  14. continue;
  15. }
  16. if(j > y) {
  17. b[p] = a[i];
  18. p++;
  19. i++;
  20. continue;
  21. }
  22. if(a[i] <= a[j]) {
  23. b[p] = a[i];
  24. i++; p++;
  25. } else {
  26. b[p] = a[j];
  27. p++; j++;
  28. }
  29. }
  30. i = x; j = mid + ;
  31. for (int k = ; k < y - x + ; k++) {
  32. if(i > mid) break;
  33. if(j > y) break;
  34. ll td = a[j];
  35. if(a[i] > * td) {
  36. res += (mid + - i);
  37. j++;
  38. } else i++;
  39. }
  40. for (int k = x; k <= y; k++)
  41. a[k] = b[k];
  42. }
  43. void mergesort(vector<int> &a, int left, int right) {
  44. if(left >= right) return;
  45. int mid = (left + right) / ;
  46. mergesort(a, left, mid);
  47. mergesort(a, mid + , right);
  48. mg(a, left, mid, right);
  49. }
  50. int reversePairs(vector<int>& nums) {
  51. res = ;
  52. int n = nums.size();
  53. if(n < ) return res;
  54. b = nums;
  55. mergesort(nums, , n - );
  56. return res;
  57. }

树状数组:

  1. typedef long long ll;
  2. class Solution {
  3. public:
  4. int res;
  5. map<ll, int> ma;
  6. ll base = 1ll << ;
  7. ll lowbit(ll x) {
  8. return x & -x;
  9. }
  10. void add(ll x) {
  11. x += base;
  12. while(x <= 1ll << ) {
  13. ma[x]++;
  14. x += lowbit(x);
  15. }
  16. }
  17. int ask(ll x) {
  18. x += base;
  19. int res = ;
  20. while(x) {
  21. res += ma[x];
  22. x -= lowbit(x);
  23. }
  24. return res;
  25. }
  26. int reversePairs2(vector<int>& nums) {
  27. res = ;
  28. int n = nums.size();
  29. if(n < ) return res;
  30. ma.clear();
  31. for (int i = n - ; i >= ; i--) {
  32. res += ask(nums[i] - 1ll);
  33. add(2ll * nums[i]);
  34. }
  35. return res;
  36. }

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. SQL基本概述

    DBMS的种类: 层次数据库HDB 面向对象数据库OODB XML数据库XMLDB 键值存储系统KVS 关系数据库RDB RDBMS(关系数据库管理系统),主要5有种: Oracle Database ...

  2. Spring+SprinMVC配置学习总结

    一千个人有一千种spring的配置方式,真是这样.看了好多的配置,试验了很多.这里做一个总结. 1 原理上,spring和springmvc可以合并为一个配置文件然后在web.xml中加载,因为最终的 ...

  3. nginx + php 403 原因分析

    环境:nginx + php 问题: 配置的网站,访问出现报错:Access Denied (403) 常见解决方法: 1.文件权限问题 可能是文件权限问题,没有读权限. 或者selinux没有关闭. ...

  4. PHP实现文字写入图片功能

    /** * PHP实现文字写入图片 */class wordsOnImg { public $config = null; /** * @param $config 传入参数 * @param $co ...

  5. Linux思维导图之sed、实战习题

    命令解释: ◆sed 2p /etc/passwd第二行打印了两次其余一次 ◆sed-n '2p' /etc/passwd 只打印出第二行 ◆sed-n 1,4p' /etc/passwd 只打印出1 ...

  6. Selenium Webdriver——操作隐藏的元素display属性

    有时候我们会碰到一些元素不可见,这个时候selenium就无法对这些元素进行操作了.例如,下面的情况: 页面主要通过“display:none”来控制整个下拉框不可见.这个时候如果直接操作这个下拉框, ...

  7. hibernate4.3版本构造SessionFactory方法

    hibernate3.X构造SessionFactory方法 //读取hibernate.cfg.xml文件 Configuration cfg = new Configuration().confi ...

  8. MySQL特异功能之:Impossible WHERE noticed after reading const tables

    用EXPLAIN看MySQL的执行计划时经常会看到Impossible WHERE noticed after reading const tables这句话,意思是说MySQL通过读取"c ...

  9. asp.net--WebService知识点

    开头是这样的 [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = Wsi ...

  10. E - Just a Hook

    E - Just a Hook HDU 1698 思路:区间修改即可. #include<cstdio> #include<cstring> #include<iostr ...