Sunday, September 22, 2019

594. Longest Harmonious Subsequence


Easy
We define a harmounious array as 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: 5
Explanation: The longest harmonious subsequence is [3,2,2,2,3].

Note: The length of the input array will not exceed 20,000.


class Solution {
public:
    int findLHS(vector<int>& nums) {        
        unordered_map<int, int> valCount;//count for values 
        for(int val : nums)
        {
            valCount[val]++;
        }
        // calculate the value that around it
        int res = 0;
        for(auto pair : valCount)
        {
            int key = pair.first;
            // res = max(res, valCount[key] + valCount[key+1]); //would error
            if(valCount.find(key+1) !=valCount.end())
            {
                res = max(res, valCount[key]+ valCount[key+1]);
            }
        }
        return res;
    }
};

注意,这里会有个语法的奇怪现象:
// res = max(res, valCount[key] + valCount[key+1]); //would error

结果会跳出循环




922. Sort Array By Parity II

Given an array A of non-negative integers, half of the integers in A are odd, and half of the integers are even.
Sort the array so that whenever A[i] is odd, i is odd; and whenever A[i] is even, i is even.
You may return any answer array that satisfies this condition.

Example 1:
Input: [4,2,5,7]
Output: [4,5,2,7]
Explanation: [4,7,2,5], [2,5,4,7], [2,7,4,5] would also have been accepted.

Note:
  1. 2 <= A.length <= 20000
  2. A.length % 2 == 0
  3. 0 <= A[i] <= 1000

class Solution {
public:
    vector<int> sortArrayByParityII(vector<int>& A) {
        int iE = 0;// only check the Odd position
        for(int iO =1;iO<A.size();iO+=2) 
        {
             if (A[iO] %2 == 0)
             {
                 while(A[iE] %2 == 0)
                 {
                    iE +=2;
                 }
                int tmp = A[iE];
                 A[iE] = A[iO];
                 A[iO] = tmp;
             }          
        }
        return A;
    }
};