Leetcode 360 Sort Transformed Array

来源:互联网 发布:英格拉姆弹跳数据 编辑:程序博客网 时间:2024/06/08 10:21

Given a sorted array of integers nums and integer values ab and c. Apply a function of the form f(x) = ax2 + bx + c to each element x in the array.

The returned array must be in sorted order.

Expected time complexity: O(n)

Example:

nums = [-4, -2, 2, 4], a = 1, b = 3, c = 5,Result: [3, 9, 15, 33]nums = [-4, -2, 2, 4], a = -1, b = 3, c = 5Result: [-23, -5, 1, 7]
抛物线开口朝上,max一定出现在两端,抛物线开口朝下,min一定出现在两端。

用双指针来进行排序。

public class Solution {        private int calcu(int x, int a, int b, int c){        return a*x*x + b*x + c;    }            public int[] sortTransformedArray(int[] nums, int a, int b, int c) {        int index;        if(a > 0){            index = nums.length - 1 ;        } else {            index = 0;        }        int result[] = new int[nums.length];        int i = 0;        int j = nums.length - 1;        if(a > 0){            while(i <= j){                result[index--] = calcu(nums[i],a,b,c) > calcu(nums[j],a,b,c) ? calcu(nums[i++],a,b,c):calcu(nums[j--],a,b,c);            }        }else{            while(i <= j){                result[index++] = calcu(nums[i],a,b,c) < calcu(nums[j],a,b,c) ? calcu(nums[i++],a,b,c):calcu(nums[j--],a,b,c);            }          }        return result;    }}



原创粉丝点击