LeetCode의 75 제목 : 색상 분류 (중)

LeetCode의 75 제목 : 색상 분류 (중)

  • 제목 : 어레이의 N 원소 빨간색, 흰색과 청색, 총 주어 원위치대로 정렬 같은 인접한 동일한 색 요소 즉 적색, 백색, 청색의 순서로 배열. 이 질문에, 우리는 빨간색, 흰색과 파란색 대표 0, 1, 2의 정수를 사용합니다. 참고 :이 문제를 해결하기 위해 정렬 기능 코드베이스를 사용할 수 없습니다.
    그림 삽입 설명 여기
  • 아이디어를 문제 해결 :이 질문은 다시 통과 할 수 0.2를 기록했다 차례로 할당 재활용 할 수있다. 그러나, 주제 알고리즘은 우주 상수를 통해 하나의 패스를 필요로한다. 나는 또한 그것을 다시 스캔 할 것이다. . .
class Solution {
    public void sortColors(int[] nums) {
        int len = nums.length;
        int R = len-1;
        int L = 0;
        int p = nums[0];
        int k = 0;
        for(int i=0;i<len;i++){
            if(p==0 ){
                nums[L++] = 0;
                k++;
                if(k<=len-1) p = nums[k];
            }else if(p==2){
                p = nums[R];
                if(R>=0) nums[R--] = 2;
            }else if(p==1){
                if(k<len-1) p = nums[++k];
            }
        }
        
        for(int i=L;i<=R;i++){
            nums[i] = 1;
        }
    }
}

그림 삽입 설명 여기

  • 문제 해결 연습 : 공식 접근법 나에게 거의하지만, 현재 위치이고 또는 오른쪽 페어 교환의 왼쪽, 그리고 내 왼쪽 또는 오른쪽으로 현재 위치가 될 것이었다.
class Solution {
  /*
  荷兰三色旗问题解
  */
  public void sortColors(int[] nums) {
    // 对于所有 idx < i : nums[idx < i] = 0
    // j是当前考虑元素的下标
    int p0 = 0, curr = 0;
    // 对于所有 idx > k : nums[idx > k] = 2
    int p2 = nums.length - 1;

    int tmp;
    while (curr <= p2) {
      if (nums[curr] == 0) {
        // 交换第 p0个和第curr个元素
        // i++,j++
        tmp = nums[p0];
        nums[p0++] = nums[curr];
        nums[curr++] = tmp;
      }
      else if (nums[curr] == 2) {
        // 交换第k个和第curr个元素
        // p2--
        tmp = nums[curr];
        nums[curr] = nums[p2];
        nums[p2--] = tmp;
      }
      else curr++;
    }
  }
}

作者:LeetCode
链接:https://leetcode-cn.com/problems/sort-colors/solution/yan-se-fen-lei-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

그림 삽입 설명 여기

게시 된 100 개 원래 기사 · 원의 찬양 (12) · 전망 2369

추천

출처blog.csdn.net/new_whiter/article/details/104536065