[Leetcode学习-c ++&java] squares-of-a-sorted-array

問題

難易度:簡単

説明:

水問題、小さいものから大きいものへと並べ替えられた配列要素を二乗し、次に小さいものから大きいものへと配列を返します。負の数があるため、二乗後に簡単に並べ替えることができます。

質問リンク:https//leetcode.com/problems/squares-of-a-sorted-array/

入力範囲:

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums 降順ではない 順にソートされ ます。

ケースを入力してください:

Example 1:
Input: nums = [-4,-1,0,3,10]
Output: [0,1,9,16,100]
Explanation: After squaring, the array becomes [16,1,0,9,100].
After sorting, it becomes [0,1,9,16,100].

Example 2:
Input: nums = [-7,-3,2,3,11]
Output: [4,9,9,49,121]

私のコード:

APIの使用は非常に簡単で、独自に作成することもできます

java:

class Solution {
    public int[] sortedSquares(int[] A) {
        for(int i = 0;i < A.length;i ++) A[i] = (int)Math.pow(A[i], 2);
        Arrays.sort(A);
        return A;
    }
}
class Solution {
    public int[] sortedSquares(int[] A) {
        int len = A.length, left = 1, right, index = 0;
        int[] B = new int[len];
        for(int i = 0;i < len;i ++) A[i] = (int)Math.pow(A[i], 2);
        for(;left < len; left ++) 
            if(A[left - 1] < A[left]) break;
        left --;
        right = left + 1;
        while(right < len && left >= 0) {
            if(A[left] < A[right]) B[index ++] = A[left --];
            else if(A[left] > A[right]) B[index ++] = A[right ++];
            else B[index ++] = B[index ++] = A[left --] = A[right ++];
        }
        while(left >= 0) B[index ++] = A[left --];
        while(right < len) B[index ++] = A[right ++];
        
        return B;
    }
}

c ++:

class Solution {
public:
	vector<int> sortedSquares(vector<int>& nums) {
		int len = nums.size(), left = 1, index = 0;
		vector<int> res(len);
		for (int i = 0; i < nums.size(); i++) nums[i] = pow(nums[i], 2);
		for (; left < nums.size(); left++)
			if (nums[left - 1] < nums[left]) break;
		left = left - 1;
		int right = left + 1;
		while (right < len && left >= 0) {
			if (nums[right] > nums[left]) res[index ++] = nums[left--];
			else if (nums[right] < nums[left]) res[index ++] = nums[right++];
			else res[index ++] = res[index ++] = nums[left--] = nums[right++];

		}
		while (left >= 0) res[index ++] = nums[left--];
		while(right < len) res[index ++] = nums[right++];
		return res;
	}
};

 

 

おすすめ

転載: blog.csdn.net/qq_28033719/article/details/111225572