[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 를 순조롭게 할 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.