배열(간단 한 문제):요소 제거

제목:
배열 nums 와 값 val 을 드 립 니 다.모든 값 이 val 과 같은 요 소 를 제자리 에서 제거 하고 제거 한 배열 의 새 길 이 를 되 돌려 야 합 니 다.추가 배열 공간 을 사용 하지 마 십시오.O(1)추가 공간 만 사용 하고 입력 배열 을 제자리 에서 수정 해 야 합 니 다.원소 의 순 서 를 바 꿀 수 있다.너 는 배열 에서 새로운 길이 뒤의 요 소 를 초과 하 는 것 을 고려 할 필요 가 없다.
예제 1:주어진 nums=[3,2,2,3],val=3,함 수 는 새로운 길이 2 를 되 돌려 야 하고 nums 의 앞의 두 요 소 는 모두 2 이다.너 는 배열 에서 새로운 길이 뒤의 요 소 를 초과 하 는 것 을 고려 할 필요 가 없다.
예 2:주어진 nums=[0,1,2,2,3,0,4,2],val=2,함 수 는 새로운 길이 5 를 되 돌려 야 하고 nums 중의 다섯 가지 요 소 는 0,1,3,0,4 이다.이 다섯 개의 요 소 는 임의의 순서 가 될 수 있 음 을 주의 하 세 요.너 는 배열 에서 새로운 길이 뒤의 요 소 를 초과 하 는 것 을 고려 할 필요 가 없다.
알고리즘 사상:
포인터 p,q 를 설정 합 니 다.포인터 p,q 는 배열 의 초기 요 소 를 가리킨다
  • 2.val 과 q 포인터 가 가리 키 는 요 소 를 비교 합 니 다.같 지 않 습 니 다.q 지향 요 소 를 p 지향 요소 에 복사 하 는 동시에 p+,q+가 같 습 니 다.q+
  • q 가 배열 의 마지막 요 소 를 가리 킬 때 까지 2 를 반복 합 니 다시간 복잡 도:O(n)공간 복잡 도:O(1)
    코드:
    public static int removeElement(int[] nums, int val) {
            int p = 0;
            int q = 0;
            while(q < nums.length) {
                if(val == nums[q]) {
                    q++;
                }else {
                    nums[p] = nums[q];
                    p++;
                    q++;
                }
            }
            return p;
        }
    

    좋은 웹페이지 즐겨찾기