Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 변환된 배열 정렬

<시간/>

정수 숫자와 정수 값 a, b 및 c의 정렬된 배열이 있다고 가정합니다. f(x) =ax^2 + bx + c 형식의 2차 함수를 배열의 각 요소 x에 적용해야 합니다. 그리고 최종 배열은 정렬된 순서여야 합니다.

따라서 입력이 nums =[-4,-2,2,4], a =1, b =3, c =5인 경우 출력은 [3,9,15,33]

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • x, a, b, c −

    를 취하는 함수 f()를 정의합니다.
  • 반환 ax^2 + bx + c

  • 주요 방법에서 다음을 수행하십시오 -

  • n :=숫자 크기

  • 시작 :=0, 종료 :=n - 1

  • n

    크기의 배열 ret 정의
  • a>=0이면 -

    • 초기화 i :=n - 1의 경우, i>=0일 때 업데이트(i를 1만큼 감소), −

      • x :=f(nums[시작], a, b, c)

      • y :=f(nums[end], a, b, c)

      • x> y이면 -

        • (시작을 1씩 증가)

        • ret[i] :=x

      • 그렇지 않으면

        • ret[i] :=y

        • (끝을 1 감소)

  • 그렇지 않으면

    • initialize i :=0의 경우, i

      • x :=f(nums[시작], a, b, c)

      • y :=f(nums[end], a, b, c)

      • x

        • (시작을 1씩 증가)

        • ret[i] :=x

      • 그렇지 않으면

        • ret[i] :=y

        • (끝을 1 감소)

  • 리턴 렛

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto< v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   int f(int x, int a, int b, int c){
      return a * x * x + b * x + c;
   }
   vector<int< sortTransformedArray(vector<int<& nums, int a, int b, int c) {
      int n = nums.size();
      int start = 0;
      int end = n - 1;
      vector<int< ret(n);
      if (a >= 0) {
         for (int i = n - 1; i >= 0; i--) {
            int x = f(nums[start], a, b, c);
            int y = f(nums[end], a, b, c);
            if (x > y) {
               start++;
               ret[i] = x;
            }
            else {
               ret[i] = y;
               end--;
            }
         }
      }
      else {
         for (int i = 0; i < n; i++) {
            int x = f(nums[start], a, b, c);
            int y = f(nums[end], a, b, c);
            if (x < y) {
               start++;
               ret[i] = x;
            }
            else {
               ret[i] = y;
               end--;
            }
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<int< v = {-4,-2,2,4};
   print_vector(ob.sortTransformedArray(v, 1, 3, 5));
}

입력

{-4,-2,2,4}, 1, 3, 5

출력

[3, 9, 15, 33, ]