leetcode_c++:Divide and Conquer:Count of Smaller Numbers After Self(315)
来源:互联网 发布:软件系统投标书 编辑:程序博客网 时间:2024/05/18 01:31
You are given an integer array nums and you have to return a new counts array. The counts array has the property where counts[i] is the number of smaller elements to the right of nums[i].
Given nums = [5, 2, 6, 1]To the right of 5 there are 2 smaller elements (2 and 1).To the right of 2 there is only 1 smaller element (1).To the right of 6 there is 1 smaller element (1).To the right of 1 there is 0 smaller element.
Return the array [2, 1, 1, 0].
http://blog.csdn.net/murmured/article/details/50201147
struct Node { int val; int index; int cnt; Node(int val, int index) : val(val), index(index), cnt(0) {} bool operator <= (const Node &node2)const { return val <= node2.val; } }; class Solution { public: void combine(vector<Node> &nums, int Lpos, int Lend, int Rend, vector<Node> &temp) { int Rpos = Lend + 1; int Tpos = Lpos; int n = Rend - Lpos + 1; int t = Rpos; while (Lpos <= Lend && Rpos <= Rend) { if (nums[Lpos] <= nums[Rpos]) { temp[Tpos] = nums[Lpos]; temp[Tpos].cnt += Rpos - t ; Tpos++; Lpos++; } else { temp[Tpos++] = nums[Rpos++]; } } while (Lpos <= Lend) { temp[Tpos] = nums[Lpos]; temp[Tpos].cnt += Rpos - t; Tpos++; Lpos++; } while (Rpos <= Rend) temp[Tpos++] = nums[Rpos++]; for (int i = 0; i< n; i++, Rend--) nums[Rend] = temp[Rend]; } void merge_sort(vector<Node> & nums, int L, int R, vector<Node> &temp) { if (L < R) { int m = (L + R) >> 1; merge_sort(nums, L, m, temp); merge_sort(nums, m + 1, R, temp); combine(nums, L, m, R, temp); } } vector<int> countSmaller(vector<int>& nums) { vector<Node> mynums; vector<Node> temp(nums.size(), Node(0, 0)); for (int i = 0; i < nums.size(); i++) mynums.push_back(Node(nums[i], i)); vector<int> ans(nums.size(), 0); merge_sort(mynums, 0, nums.size() - 1, temp); for (int i = 0; i < nums.size(); i++) ans[mynums[i].index] = mynums[i].cnt; return ans; } };
0 0
- leetcode_c++:Divide and Conquer:Count of Smaller Numbers After Self(315)
- 315. Count of Smaller Numbers After Self ( Divide and Conquer)
- 315. Count of Smaller Numbers After Self(divide and conquer)
- 315Count of Smaller Numbers After Self
- 315-Count of Smaller Numbers After Self
- leetcode Count of Smaller Numbers After Self
- leetcode Count of Smaller Numbers After Self
- [LeetCode315]Count of Smaller Numbers After Self
- leetcode Count of Smaller Numbers After Self
- Count of Smaller Numbers After Self | LeetCode
- leetcode Count of Smaller Numbers After Self
- LeetCode Count of Smaller Numbers After Self
- [Leetcode]Count of Smaller Numbers After Self
- leetcode - Count of Smaller Numbers After Self
- leetcode:Count of Smaller Numbers After Self
- Count of Smaller Numbers After Self
- Count of Smaller Numbers After Self
- Count of Smaller Numbers After Self
- 阿狸的打字机
- 238. Product of Array Except Self **
- 【2015-2016】只为遇见更好的自己,我们各自奔天涯
- TextView图文混排
- 下拉刷新、上拉加载更多控件实现原理及解析
- leetcode_c++:Divide and Conquer:Count of Smaller Numbers After Self(315)
- Android View事件传递机制(一)
- Java 7之基础 - 强引用、弱引用、软引用、虚引用
- 网页乱码
- Python 生涯
- leetcode_c++:Divide and Conquer:Count of Range Sum(327)
- Java实现生产者与消费者
- Native English
- 【年中总结】不忘初心,持续向前