[Lint Code] 144. 양 과 음 이 교차 합 니 다 (카드 가 65% 인 당신 에 게 바 칩 니 다)

5450 단어 알고리즘
머리말
최근 에 공중 번 호 를 발 견 했 습 니 다. 매일 한 문 제 를 풀 었 습 니 다. 난이도 도 크 지 않 고 문제 도 짧 습 니 다. 검색 해 보 니 문 제 는 모두 LintCode 라 는 플랫폼 의 것 입 니 다. 오늘 은 트럼펫 을 등록 하여 풀 었 습 니 다. 중국 어 는 매우 우호 적 입 니 다. (LeetCode 에 비해 많은 수박 을 먹 는 사람들 을 행복 하 게 해 준다 고 할 수 있 습 니 다) 그리고 어떤 사례 를 볼 수 있 습 니까?의 선수), 그리고 LeetCode 와 유사 하여 중요 한 방법 만 쓰 고 포맷 출력 입력 에 관여 하지 않 습 니 다.
본문
LintCode 144 교차 양음 수
설명: 정수 와 음 정 수 를 포함 하 는 배열 을 제시 하고 양수 가 교차 하 는 배열 로 다시 배열 합 니 다.샘플: 배열 [- 1, - 2, - 3, 4, 5, 6] 을 제시 하고 다시 정렬 한 후에 [- 1, 5, - 2, 4, - 3, 6] 또는 다른 모든 요 구 를 만족 시 키 는 답 이 됩 니 다.
나의 생각 은 매우 간단 하 다. 왜냐하면 요구 가 없 으 면 반드시 시작 이 어야 하거나 마이너스 시작 이 어야 하기 때문이다. A [1] A [3] A [5]. A [0] 기호 와 달리 A [2], A [4], A [6]... A [0] 기호 와 같 으 면 요 구 를 만족 시 킬 수 있다.그래서 이런 코드 를 썼 습 니 다.
class Solution {
public:
    /*
     * @param A: An integer array.
     * @return: nothing
     */
    void rerange(vector<int> &A) {
        int flag = A[0];
        vector<int>::iterator i = A.begin() + 1; //A[1] A[3] A[5] 
        vector<int>::iterator j = A.begin() + 2; //A[2] A[4] A[6] 
        while(i < A.end() && j < A.end()){
            while(*i * flag < 0 ) //      A[0]  ,        
                i = i + 2;
            while(*j * flag > 0 )//      A[0]  ,        
                j = j + 2;
            if(i < A.end() && j < A.end()){//  
                int temp = *i;
                *i = *j;
                *j = temp;
            }else
                break;
            i = i + 2;
            j = j + 2; 
        }

    }
};

카드 65%...
그리고 65% 에 화려 하 게 걸 리 는 예 는 지나 갈 수 없다.그 예 를 들 어 나의 수출 마지막 몇 개 에 같은 번호 가 나 타 났 다. 그래서 다른 사람의 문 제 를 보고 다른 사람 이 올 라 와 서 플러스 와 마이너스 의 수량 을 비교 하거나 정렬 하 는 것 을 발견 했다.
What ???(여 백 물음표. jpg)
정확 한 사고 방향.
emmmmm, 고 칠 수 없어 서 먼저 밥 을 먹 으 러 갔 어 요. 길에서 생각 하고 Axin 에 게 이 야 기 를 했 더 니 예전 에 생각 한 잘못 을 단번에 얻 었 어 요.
교차 하 는 것 이기 때문에 양음 수 간 의 수량 관 계 는 세 가지 가 있다. 1. 양음 수 는 똑 같이 많다. 예 를 들 어 2 정 2 음 이다. 이때 순 서 는 양음 양음 또는 마이너스 양음 이 될 수 있다.2. 양수 가 음수 보다 하나 더 많다. 예 를 들 어 3 정 2 음 이다. 이때 순 서 는 반드시 양음 과 양음 이 어야 한다.3. 음 수 는 양수 보다 하나 더 많 고, 동상 은 반드시 음 과 음 과 음 이 어야 한다.
그리고 저 는 A [0] 를 기준 으로 했 습 니 다. 즉, 입력 사례 가 1,2,-1,-2,-3 일 때 제 수출 결 과 는 1,-1,2,-2,-3 이 고 마지막 에 같은 번호 가 나 온 것 이 분명 합 니 다.그래서 어 쩔 수 없 이 원래 코드 에서 고 쳤 습 니 다.
        int a = 0, b = 0,length = A.size();
        for(auto i : A){ //  ,a    ,b    
            if(i > 0)
                a++;
            else
                b++;
        }
        if(a > b && A[0] < 0){//   ,  A[0]   
            for(int i = 1; i < length; i++)//      , A[0]  
                if(A[i] > 0){
                    swap(A[0],A[i]);
                    break;
                }
        }
        if(b > a && A[0] > 0){//   ,  A[0]   
            for(int i = 1; i < length; i++)//      , A[0]  
                if(A[i] < 0){
                    swap(A[0],A[i]);
                    break;
                }
        }
        //           

Ok, 이번에 우 리 는 A [0] 의 기호 가 반드시 정확 하 다 는 것 을 보증 하고 AC 를 순조롭게 할 것 이다.

좋은 웹페이지 즐겨찾기