zoukankan      html  css  js  c++  java
  • 360. Sort Transformed Array

        /*
         * 360. Sort Transformed Array
         * 2016-7-14 by Mingyang
         * 这个题目吧一开始还做错了,一看就是初中数学没学好,抛物线定理,a大于0像上嘛,肯定两边相比最大的就最大嘛
         * 再看看a小于0的时候,向下,那么就是两边相比最小的肯定最小
         * 自己一开始只考虑了a为0的情况。
         * 另外参考了大神的代码,大神少用了一个list,二用一个index来代替array中现在的index
         * 因为我们确认了array的长度是len
         */
        //自己的错误代码
        public static int[] sortTransformedArray(int[] nums, int a, int b, int c) {
            int len = nums.length;
            if (nums == null || len == 0)
                return null;
            int begin = 0;
            int end = len - 1;
            List<Integer> list = new ArrayList<Integer>();
            while (begin <= end) {
                int left = a * (int) Math.pow(nums[begin], 2.0) + b * nums[begin] + c;
                int right = a * (int) Math.pow(nums[end], 2.0) + b * nums[end] + c;
                if (left < right) {
                    list.add(0, right);
                    end--;
                } else {
                    list.add(0, left);
                    begin++;
                }
            }
            int[] res = new int[list.size()];
            for (int i = 0; i < res.length; i++) {
                res[i] = list.get(i);
            }
            return res;
        }
        // 大神的
        public int[] sortTransformedArray1(int[] nums, int a, int b, int c) {
            int n = nums.length;
            int[] sorted = new int[n];
            int i = 0, j = n - 1;
            int index = a >= 0 ? n - 1 : 0;
            while (i <= j) {
                if (a >= 0) {
                    sorted[index--] = quad(nums[i], a, b, c) >= quad(nums[j], a, b, c) ? quad(nums[i++], a, b, c)
                            : quad(nums[j--], a, b, c);
                } else {
                    sorted[index++] = quad(nums[i], a, b, c) >= quad(nums[j], a, b, c) ? quad(nums[j--], a, b, c)
                            : quad(nums[i++], a, b, c);
                }
            }
            return sorted;
        }
        private int quad(int x, int a, int b, int c) {
            return a * x * x + b * x + c;
        }
  • 相关阅读:
    HDU
    C# Stopwatch
    RMQ(Range Minimum Query)问题(转)
    HDU
    POJ
    HDU
    POJ
    POJ
    docker安装testlink
    廖雪峰Java2面向对象编程-3继承和多态-2多态
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5672525.html
Copyright © 2011-2022 走看看