면접 알고리즘: 링크 에 고리 가 있 는 지 여 부 를 어떻게 판단 합 니까?

6830 단어 Swift알고리즘
어떻게 링크 에 고리 가 있 는 지 판단 합 니까?
  • 방법 1: 이중 순서 로 옮 겨 다 니 기
  • 코드 는 다음 과 같다
  • 방법 2: 이전의 옮 겨 다 니 는 결 과 를 저장 합 니 다
  • 방법 3: 링 트랙 이 속도 가 같 지 않 으 면 두 사람 은 반드시 만 날 것 이다.
  • 코드
  • 확장: 어떻게 출입 환 점 을 구 합 니까?링 길이?

  • 방법 1: 이중 순서 로 옮 겨 다 니 기
    첫 번 째 노드 부터 한 번 에 하나의 체인 표를 옮 겨 다 니 는 모든 노드.새로운 노드 를 옮 겨 다 니 지 않 고 새로운 노드 이전의 모든 노드 를 처음부터 검사 하고 새로운 노드 와 이전의 모든 노드 를 한 번 에 비교 하면 이전의 특정한 노드 와 같다 는 것 을 발견 하면 이 노드 가 두 번 옮 겨 다 니 는 것 을 설명 하고 링 을 설명 한다.단점: 시간 복잡 도 O (n ^ 2) 가 너무 높 고 공간 복잡 도 O (1)
    코드 는 다음 과 같다.
    0
    1
    2
    3
    4
    5
    ///Swift   
    public class Node {
        var data: Int
        var next: Node?
        init(_ data: Int) {
            self.data = data;
        }
    }
    
    func nodeIsRing(_ node: Node) -> Bool {
        var nextNode = node.next
        while nextNode != nil {
            var proNode = node
            while (nextNode! !== proNode) {
                if proNode === nextNode?.next {
                    return true //       true     
                }
                proNode = proNode.next!
            }
            nextNode = nextNode?.next//       
        }
        return false;
    }
    

    방법 2: 이전의 옮 겨 다 니 는 결 과 를 저장 합 니 다.
    앞 에 널 려 있 는 데 이 터 를 모두 저장 하고 새로운 노드 와 이전의 대 비 는 똑 같은 설명 이 있 으 면 고리 가 있다 는 것 이다.해시 표, 코드 약간... 시간 복잡 도: O (n) 공간 복잡 도 O (n)
    방법 3: 링 트랙, 속도 가 같 지 않 으 면 두 사람 은 반드시 만 날 것 이다.
    링 인 이상 우 리 는 두 개의 변 수 를 사용 하고 하 나 는 증가폭 이 1 이 며 하 나 는 증가폭 이 2 라면 두 개의 지침 은 반드시 만 날 것 이다.고리 가 아니 었 다 면 영원히 만 나 지 못 했 을 것 이다.
    시간 복잡 도: O (n) 공간 복잡 도 역시 O (1)
    코드
    func isNodeSpeed(_ node: Node) -> Bool {
        var fastNode: Node? = node
        var slowNode: Node? = node
        while true {
            fastNode = fastNode?.next?.next
            slowNode = slowNode?.next
            if fastNode == nil && slowNode == nil {
                return false  //   
            }
            if fastNode != nil && slowNode != nil && fastNode === slowNode {
                return true //  
            }
        }
    }
    

    확장: 어떻게 출입 환 점 을 구 합 니까?링 길이?
    아래 댓 글 환영 합 니 다.

    좋은 웹페이지 즐겨찾기