566. Reshape the Matrix/624. Maximum Distance in Arrays/594. Longest Harmonious Subsequence
来源:互联网 发布:windows 7 下载 编辑:程序博客网 时间:2024/06/11 15:13
- Reshape the Matrix
- description
- implementation
- Maximum Distance in Arrays
- description
- implementation
- Longest Harmonious Subsequence
- description
- implementation
566. Reshape the Matrix
description
In MATLAB, there is a very useful function called ‘reshape’, which can reshape a matrix into a new one with different size but keep its original data.
You’re given a matrix represented by a two-dimensional array, and two positive integers r and c representing the row number and column number of the wanted reshaped matrix, respectively.
The reshaped matrix need to be filled with all the elements of the original matrix in the same row-traversing order as they were.
If the ‘reshape’ operation with given parameters is possible and legal, output the new reshaped matrix; Otherwise, output the original matrix.
Example 1:Input: nums = [[1,2], [3,4]]r = 1, c = 4Output: [[1,2,3,4]]
Explanation:
The row-traversing of nums is [1,2,3,4]. The new reshaped matrix is a 1 * 4 matrix, fill it row by row by using the previous list.
Example 2:
Input: nums = [[1,2], [3,4]]r = 2, c = 4Output: [[1,2], [3,4]]
Explanation:
There is no way to reshape a 2 * 2 matrix to a 2 * 4 matrix. So output the original matrix.
Note:
The height and width of the given matrix is in range [1, 100].
The given r and c are all positive.
implementation
class Solution {public: vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) { int row = nums.size(); if(!row) return nums; int col = nums[0].size(); if(row*col != r*c) return nums; vector<vector<int>> res(r, vector<int>(c, 0)); for(int idx_r = 0; idx_r < r; idx_r++) { int num_row = idx_r*c; for(int idx_c = 0; idx_c < c; idx_c++) { int num_ttl = num_row+idx_c; res[idx_r][idx_c] = nums[num_ttl/col][num_ttl%col]; } } return res; }};
624. Maximum Distance in Arrays
description
Given m arrays, and each array is sorted in ascending order. Now you can pick up two integers from two different arrays (each array picks one) and calculate the distance. We define the distance between two integers a and b to be their absolute difference |a-b|. Your task is to find the maximum distance.
Example 1:Input: [[1,2,3], [4,5], [1,2,3]]Output: 4
Explanation:
One way to reach the maximum distance 4 is to pick 1 in the first or third array and pick 5 in the second array.
Note:
Each given array will have at least 1 number. There will be at least two non-empty arrays.The total number of the integers in all the m arrays will be in the range of [2, 10000].The integers in the m arrays will be in the range of [-10000, 10000].
implementation
This solution is simple: compare the abs(tail1 - head2) and abs(tail2 - head1), as the biggest difference is in it. So go through the arrays with O(n^2) complexity.
class Solution {public: int maxDistance(vector<vector<int>>& arrays) { int res = 0; int row = arrays.size(); if(row <= 1) return res; int col = arrays[0].size(); for(int idx1 = 0; idx1 < row - 1; idx1++) { int head1 = arrays[idx1][0]; int tail1 = arrays[idx1][arrays[idx1].size()-1]; for(int idx2 = idx1 + 1; idx2 < row; idx2++) { int head2 = arrays[idx2][0]; int tail2 = arrays[idx2][arrays[idx2].size()-1]; if(abs(tail1 - head2) > res) res = abs(tail1 - head2); if(abs(tail2 - head1) > res) res = abs(tail2 - head1); } } return res; }};
594. Longest Harmonious Subsequence
description
We define a harmonious array is an array where the difference between its maximum value and its minimum value is exactly 1.
Now, given an integer array, you need to find the length of its longest harmonious subsequence among all its possible subsequences.
Example 1:Input: [1,3,2,2,5,2,3,7]Output: 5Explanation: The longest harmonious subsequence is [3,2,2,2,3].
Note: The length of the input array will not exceed 20,000.
implementation
Use the map to store the key-value pair, then find the difference between two keys, if diff is 1, then compare the sum of number with previous best result.
class Solution {public: int findLHS(vector<int>& nums) { int nums_size = nums.size(); int res = 0; if(nums_size <= 1) return res; map<int, int> value_mp; sort(nums.begin(), nums.end()); for(int idx = 0; idx < nums_size; idx++) { if(value_mp[nums[idx]] > 0) value_mp[nums[idx]]++; else value_mp[nums[idx]] = 1; } int pre_k = 0; int pre_v = 0; for(map<int, int>::iterator it = value_mp.begin(); it != value_mp.end(); it++) { if(!pre_v) { pre_k = it->first; pre_v = it->second; } else { if(it->first - pre_k == 1) { if(it->second + pre_v > res) res = it->second + pre_v; } pre_k = it->first; pre_v = it->second; } } return res; }};
- 566. Reshape the Matrix/624. Maximum Distance in Arrays/594. Longest Harmonious Subsequence
- 594. Longest Harmonious Subsequence
- 594. Longest Harmonious Subsequence
- 594. Longest Harmonious Subsequence
- 594. Longest Harmonious Subsequence
- 594. Longest Harmonious Subsequence
- 594. Longest Harmonious Subsequence
- LeetCode 594. Longest Harmonious Subsequence
- [leetcode]594. Longest Harmonious Subsequence
- [LeetCode]594. Longest Harmonious Subsequence
- [leetcode]: 594. Longest Harmonious Subsequence
- [LeetCode]594.Longest Harmonious Subsequence
- LeetCode#594. Longest Harmonious Subsequence
- leetcode 594. Longest Harmonious Subsequence
- LeetCode 594. Longest Harmonious Subsequence
- 【LeetCode】594. Longest Harmonious Subsequence
- leetcode-624. Maximum Distance in Arrays
- [leetcode]: 624. Maximum Distance in Arrays
- 用Activity实现对话框效果
- isFinite方法详解
- java设计模式19_备忘录模式
- jedis 保存自定义List和Object对象
- bzoj1748 [Usaco2005 open]Around the world 环球飞行
- 566. Reshape the Matrix/624. Maximum Distance in Arrays/594. Longest Harmonious Subsequence
- 共享经济模式对户外广告行业的启发
- 使用Xshell&Xftp实现远程登录及文件传输
- Klein3000&绞车一次故障排除
- Git—学习与使用
- 如何计算时间复杂度
- ACdream 1064 完美数(数位dp)
- html table 个人简历demo
- top、padding-top、margin-top的区别(以及个人总结)---前端进阶(随笔)