leetcode笔记—生成最大的 数组Create Maximum Number
来源:互联网 发布:java入门到精通4 pdf 编辑:程序博客网 时间:2024/06/06 03:27
给定两给数组,从中选取K个使这K个在原始数组中的顺序不变,使数组最大
思路:涉及到三个函数:1.取数组中k个最大的元素,顺序不变;
2.合并两个数组,顺序不变,使最大;
3.比较两个数组的大小;
class Solution {public: vector<int> maxArray(vector<int> nums, int k){ //取数组中K个最大的元素 vector<int> res(k); stack<int> stack; //栈,先进后出 for(int i = 0 ;i < nums.size(); i++) { while(!stack.empty() && nums.size() - i + stack.size() > k && nums[i] > stack.top()) stack.pop(); if(stack.size() < k) stack.push(nums[i]); } while(!stack.empty()) { res[k-1] = stack.top(); stack.pop(); k--; } return res;}vector<int> merge(vector<int> nums1, vector<int> nums2, int k){ //合并两个数组 vector<int> res(k); for(int i = 0,j= 0,l =0; l < k; l++) { res[l] = greaterArray(nums1,nums2,i,j) ? nums1[i++]:nums2[j++]; } return res;}bool greaterArray(vector<int> nums1, vector<int> nums2, int i, int j){ while(i < nums1.size() && j < nums2.size() && nums1[i] == nums2[j]) { i++; j++; } return j == nums2.size() || (i < nums1.size() && nums1[i] > nums2[j]);}vector<int> maxNumber(vector<int>& nums1, vector<int>& nums2, int k) { vector<int> ans(k,INT_MIN); for(int i = max(0,k-(int)nums2.size()); i <= k && i <= nums1.size(); i++) { vector<int> tmp = merge(maxArray(nums1,i),maxArray(nums2,k-i),k); if(greaterArray(tmp,ans,0,0)) ans = tmp; } return ans; }};
0 0
- leetcode笔记—生成最大的 数组Create Maximum Number
- leetcode笔记--Create Maximum Number
- leetcode oj 321. Create Maximum Number 在两个数组里选k个最大的数
- leetcode Create Maximum Number
- Create Maximum Number | LeetCode
- leetcode Create Maximum Number
- LeetCode Create Maximum Number
- leetcode - Create Maximum Number
- [LeetCode] Create Maximum Number
- [LeetCode] Create Maximum Number
- LeetCode 321. Create Maximum Number(寻找最大数)
- LeetCode题解——Create Maximum Number
- Leetcode——321.Create Maximum Number
- 321. Create Maximum Number 找到两个数组中能合并的k个的最大数
- leetcode 321. Create Maximum Number 根据两个整数创造一个最大的数
- leetcode 321: Create Maximum Number
- leetcode 321. Create Maximum Number
- LeetCode 321. Create Maximum Number
- 数据结构----完全二叉树和满二叉树以及前序、中序、后序遍历
- 使用ThinkPHP框架快速搭建网站(通俗易懂)
- Java 实现导出excel表 POI
- 语义化标签
- 树-Path Sum II(指定和,求根到叶子的路径)
- leetcode笔记—生成最大的 数组Create Maximum Number
- 函数式编程
- java设计模式-组合模式
- Android Home按键的监听与屏蔽方式
- 提交表单用ajax判断登录正确并跳转页面的方法
- POJ 3268Silver Cow Party (迪杰斯特拉)
- 2016.5.25笔记
- C++作业6
- Python3 迭代器与生成器