순환 정렬 알고리즘

7445 단어 sortingjavaalgorithms
순환 정렬
전제 조건: 배열 요소는 1에서 배열 길이 사이여야 합니다.Circular Sorting에서 요소는 자연 색인에 배치됩니다.
예: if the array is [5,4,2,1,3] => [1,2,3,4,5]
class Solution {
    public List<Integer> findDuplicates(int[] nums){
        int i =0,n  = nums.length;
        while(i<n){
            int j = nums[i]-1;
            if(nums[i]!=nums[j]){
                swap(nums,i,j);
            }
            else i++;
        }

    }
    public void swap(int[] nums,int i ,int j){
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }


용법:
  • 어레이에서 중복 항목을 식별하는 데 유용합니다
  • .
  • 배열에서 누락된 요소를 찾는 데 사용할 수도 있습니다
  • .

    예 : 배열의 요소가 범위n에 있는 길이0<=element<=n의 배열에서 누락된 요소 찾기

    class Solution {
        public int missingNumber(int[] nums) {
            int i =0,n = nums.length;
            // circular sorting
            while(i<n){
                int  j = nums[i]-1;
                if(j<0) {i++ ; continue;}
                else if(nums[i]!=nums[j]) swap(nums,i,j);
                else i++;
            }
            int missing = 0;
            for(int k = 0;k<nums.length;k++){
                if(k!=nums[k]-1){ missing = k+1; break;}
            }
            return missing;
    
        }
        public void swap(int[] nums,int i,int j){
            int temp  = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
    }
    

    좋은 웹페이지 즐겨찾기