3097. 최소 K II 이상의 OR을 갖는 최단 하위 배열
난이도:중
주제: 어레이, 비트 조작, 슬라이딩 윈도우
음수가 아닌 정수로 구성된 배열 num과 정수 k가 제공됩니다.
모든 요소의 비트별 OR이 적어도 k인 경우 배열을 특수
라고 합니다.숫자의 가장 짧고 비어 있지 않은 하위 배열1의 길이를 반환하거나, 특수 하위 배열이 없으면 -1을 반환합니다.
예 1:
예 2:
예 3:
제약조건:
힌트:
해결책:
비트 조작과 결합된 슬라이딩 창 접근 방식을 사용하여 창에 있는 요소의 OR을 추적할 수 있습니다.
이 솔루션을 PHP로 구현해 보겠습니다: 3097. 최소 K II 이상의 OR을 갖는 최단 하위 배열
minimumSubarrayLength($nums1, $k1) . "\n"; // Output: 1 $nums2 = [2, 1, 8]; $k2 = 10; echo $solution->minimumSubarrayLength($nums2, $k2) . "\n"; // Output: 3 $nums3 = [1, 2]; $k3 = 0; echo $solution->minimumSubarrayLength($nums3, $k3) . "\n"; // Output: 1 ?>설명:
minimumSubarrayLength 메서드:
- ANS를 불가능한 높은 값($n 1)으로 초기화합니다.
- 두 개의 포인터 l(왼쪽)과 r(오른쪽)을 사용하여 창을 확장하거나 축소합니다.
- orNum으로 창을 확장하면서 하위 배열의 OR을 계산하고 축소할 때 undoOrNum으로 창을 줄입니다.
- OR 결과가 k를 충족하거나 초과할 때마다 현재 창 크기가 ans보다 작은지 확인하세요.
orNum 및 undoOrNum 메소드:
- orNum 메소드: 카운트 배열을 업데이트하여 누적 OR에 비트를 추가합니다. 창에 비트가 새로 설정되면(즉 count[i]가 1이 됨) 해당 비트가 ors에 추가됩니다.
- undoOrNum 메서드: 창을 왼쪽으로 밀 때 누적 OR에서 비트를 제거합니다. 창의 숫자에 비트가 더 이상 설정되지 않으면(count[i]가 0이 됨을 의미) 해당 비트는 ors에서 제거됩니다.
시간 복잡성:
- 각 인덱스가 데크에 최대 한 번 추가되고 제거되므로 시간 복잡도는 O(n)입니다.
- n은 입력 배열의 길이입니다.
4*시간 복잡도*:
연락처 링크
이 시리즈가 도움이 되었다면 GitHub에서 저장소에 별표를 표시하거나 즐겨찾는 소셜 네트워크에서 게시물을 공유해 보세요. 여러분의 지원은 저에게 큰 의미가 될 것입니다!
이렇게 더 유용한 콘텐츠를 원하시면 저를 팔로우해주세요.
하위 배열 : 하위 배열은 배열 내 연속된 비어 있지 않은 요소 시퀀스입니다. ↩
위 내용은 OR이 최소 K II인 최단 하위 배열의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!