한 번 밖 에 안 나 오 는 숫자.

2166 단어
빈 정수 가 아 닌 배열 을 지정 합 니 다. 특정한 요소 가 한 번 만 나타 나 는 것 을 제외 하고 나머지 모든 요 소 는 두 번 씩 나타 납 니 다.한 번 밖 에 나타 나 지 않 은 원 소 를 찾 아 라.
설명:
너의 알고리즘 은 선형 시간 복잡 도 를 가 져 야 한다.당신 은 추가 공간 을 사용 하지 않 고 실현 할 수 있 습 니까?
예시 1:
입력: [2, 2, 1] 출력: 1 예시 2:
입력: [4, 1, 2, 1, 2] 출력: 4
해답: 자신 이 쓴 코드 는 생각 이 간단 합 니 다. 사전 을 만 들 고 전체 배열 을 순환 합 니 다. 이 값 이 사전 에 나타 나 면 이 값 이 한 번 이상 나타 나 는 것 을 증명 하고 사전 에서 이 요 소 를 삭제 합 니 다. 그렇지 않 으 면 이 값 을 사전 에 저장 합 니 다.
 s = {}
        for i in nums:
            if i in s.keys():
                s.pop(i)
            else:
                s[i]=1
        return list(s.keys())[0]

대신 의 해답 을 보고 자신 이 쓴 방법 이 얼마나 낮은 지 느끼 고 이법 을 쓰 는 것 은 너무 편 하지 않다.먼저 화, 또는, 이 또는 연산 을 말 하 세 요.
1. 연산 (&)
연산 에 참가 한 두 데 이 터 는 이 진 위치 에 따라 '와' 연산 을 한다.
연산 규칙: 0 & 0 = 0;0&1=0; 1&0=0; 1&1=1; 즉, 두 분 이 동시에 '1' 이 고 결 과 는 '1' 이 며 그렇지 않 으 면 0 이다.
예 를 들 어 3 & 5 즉 0000 0011 & 0000 0101 = 0000 0001 이 므 로 3 & 5 는 1 의 가치 가 있다.
예 를 들 어 9 & 5 즉 0000 1001 (9 의 바 이 너 리 패 치) & 00000101 (5 의 바 이 너 리 패 치) = 0000001 (1 의 바 이 너 리 패 치) 은 9 & 5 = 1 을 볼 수 있다.
2. 또는 연산 (|)
연산 에 참가 하 는 두 대상 은 이 진 위치 에 따라 "또는" 연산 을 한다.
연산 규칙: 0 | 0 = 0;0|1=1; 1|0=1; 1|1=1;
즉, 연산 에 참가 하 는 두 대상 은 하나 가 1 이면 그 값 은 1 이다.
예 를 들 어 3 | 5 즉 0000 0011 | 0000 0101 = 0000 0111 이 므 로 3 | 5 는 7 의 가치 가 있다.
예 를 들 어 9 | 5 는 다음 과 같이 계산 할 수 있 습 니 다. 0001001 | 0000101 = 00001101 (10 진법 은 13) 에서 9 | 5 = 13 을 볼 수 있 습 니 다.
3. 이 또는 연산 (^)
연산 에 참가 한 두 개의 데 이 터 는 이 진 위치 에 따라 '이 또는' 연산 을 한다.
연산 규칙: 0 ^ 0 = 0;0^1=1; 1^0=1; 1^1=0;
즉, 연산 에 참가 하 는 두 대상 이 두 개의 해당 위치 가 '이' (값 이 다르다) 면 이 결 과 는 1 이 고 그렇지 않 으 면 0 이다.
예 를 들 어 9 ^ 5 는 다음 과 같이 산식 으로 쓸 수 있 습 니 다: 0000101 ^ 0000101 = 0001100 (10 진법 은 12) 에서 9 ^ 5 = 12 를 볼 수 있 습 니 다.
그래서 이 를 사용 하거나 연산 하 는 모든 같은 요 소 는 서로 상쇄 되 고 나머지 '싱글 개' 요 소 는 생각 하기 쉽다.대신 코드:
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        result = nums[0]
        for i in range(1,len(nums)):
            result ^= nums[i]
        return result

차이 야, 계속 노력 해!!

좋은 웹페이지 즐겨찾기