C++LeetCode 구현(88.혼합 질서 있 는 배열 삽입)

[LeetCode]88.정렬 된 배열 을 병합 하여 질서 있 는 배열 을 삽입 합 니 다.
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
  • The number of elements initialized in nums1and nums2 are m and n respectively.
  • You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2.
  • Example:
    Input:
    nums1 = [1,2,3,0,0,0], m = 3
    nums2 = [2,5,6],       n = 3
    Output: [1,2,2,3,5,6]
    혼합 은 질서 있 는 배열 을 삽입 합 니 다.두 배열 이 모두 질서 가 있 기 때문에 모든 것 은 순서대로 크기 를 비교 하면 됩 니 다.제목 에서 nums 1 배열 은 충분 한 공간 이 있다 고 말 했다.이 는 resize 배열 을 사용 하지 않 고 m 와 n 을 주 었 다 는 것 을 의미한다.그러면 혼합 후의 배열 의 크기 를 알 수 있다.그러면 nums 1 과 nums 2 배열 의 끝 부터 하나씩 비교 하고 비교적 큰 수 를 순서대로 뒤에서 앞으로 혼합 한 배열 의 끝 을 넣는다.세 개의 변수 i,j,k 가 필요 합 니 다.각각 nums 1,nums 2,혼합 배열 의 끝 을 가리 키 고 있 습 니 다.while 순환 을 진행 합 니 다.만약 에 i 와 j 가 0 보다 크 면 nums 1[i]>nums 2[j]를 보면 nums 1[i]을 혼합 배열 의 끝 에 넣 고 가입 한 후에 k 와 i 는 모두 1 을 줄 여야 한 다 는 것 을 설명 합 니 다.반대로 nums 2[j]를 혼합 배열 의 끝 에 넣 고 가입 한 후에 k 와 j 는 모두 1 을 줄 여야 한다.순환 이 끝 난 후에 i 나 j 가 0 보다 클 수 있 습 니 다.만약 에 j 가 0 보다 크 면 계속 순환 해 야 합 니 다.nums 2 의 숫자 를 nums 1 에 계속 복사 해 야 합 니 다.i 가 0 보다 크 면 상관 하지 마 세 요.혼합 배열 자체 가 nums 1 에 놓 여 있 기 때문에 코드 는 다음 과 같 습 니 다.
    해법 1: 
    
    class Solution {
    public:
        void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
            int i = m - 1, j = n - 1, k = m + n - 1;
            while (i >= 0 && j >= 0) {
                if (nums1[i] > nums2[j]) nums1[k--] = nums1[i--];
                else nums1[k--] = nums2[j--];
            }
            while (j >= 0) nums1[k--] = nums2[j--];
        }
    };
    우 리 는 좀 더 간결 하 게 쓸 수 있 습 니 다.두 while 순환 을 하나 로 융합 시 킬 수 있 습 니 다.i>=0 과 nums 1[i]>nums 2[j]의 판단 조건 을 더 하면 nums 1 에서 수 를 취 할 수 있 습 니 다.그렇지 않 으 면 nums 2 에서 계속 수 를 취 할 수 있 습 니 다.코드 는 다음 과 같 습 니 다.
    해법 2:
    
    class Solution {
    public:
        void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
            int i = m - 1, j = n - 1, k = m + n - 1;
            while (j >= 0) {
                nums1[k--] = (i >= 0 && nums1[i] > nums2[j]) ? nums1[i--] : nums2[j--];
            }
        }
    };
    C++구현 LeetCode(88.혼합 삽입 질서 있 는 배열)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C++혼합 삽입 질서 있 는 배열 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기