리 트 코드 (LeetCode) 는 음수 가 아 닌 배열 을 지정 합 니 다. 당신 은 처음에 배열 의 첫 번 째 위치 에 있 었 습 니 다.

3429 단어 Swift알고리즘
리 트 코드 (LeetCode) 는 음수 가 아 닌 배열 을 지정 합 니 다. 당신 은 처음에 배열 의 첫 번 째 위치 에 있 었 습 니 다.
마이너스 정수 가 아 닌 배열 을 지정 합 니 다. 당신 은 처음에 배열 의 첫 번 째 위치 에 있 었 습 니 다.배열 의 모든 요 소 는 이 위치 에서 점프 할 수 있 는 최대 길 이 를 나타 낸다.네가 마지막 위치 에 도달 할 수 있 는 지 없 는 지 를 판단 해라.
예제 1: 입력: [2, 3, 1, 1, 4] 출력: true 설명: 우 리 는 먼저 한 걸음 뛰 고 위치 0 에서 위치 1 에 도착 한 다음 에 위치 1 에서 3 걸음 뛰 어 마지막 위치 에 도착 할 수 있다.
예제 2: 입력: [3, 2, 1, 0, 4] 출력: false 설명: 어쨌든 색인 이 3 인 위치 에 도착 할 것 입 니 다.그러나 이 위치의 최대 점프 길 이 는 0 이기 때문에 마지막 자리 에 도달 할 수 없다.
방법: 역순 법
우 리 는 이렇게 생각 할 수 있다. 종점 길이: k, 그 중에서 k 의 초기 값 은 Array. count - 1 (아래 표 시 된 0 부터 주의 하 십시오)
  • 역순 순환 배열
  • 마지막 위치 에 있 는 이전 위치 pro: pro + array [pro] > = k 를 업데이트 하면 k 의 값 을 업데이트 합 니 다. 현재 종점 길이 k = pro
  • 순환 이 끝 난 것 을 알 고 최종 판단: k = = 0 이면 true 로 돌아 가 고 그렇지 않 으 면 false 로 돌아 갑 니 다
  • //swift    
    func canJump(_ nums: [Int]) -> Bool {
        if nums.count <= 1 {
            return true
        }
        var k = nums.count - 1
        var pro = nums.count - 2
        while pro >= 0 {
            if nums[pro] + pro >= k {
                k = pro
            }
            pro = pro - 1
        }
        return k == 0 ? true : false
    }
    

    복잡 도 분석
    시간 복잡 도: O (n), 그 중 n 은 배열 의 크기 입 니 다.nums 배열 에 한 번 만 접근 하면 총 n 개의 위치 가 있 습 니 다.공간 복잡 도: O (1), 추가 공간 비용 이 필요 없습니다.

    좋은 웹페이지 즐겨찾기