Container With Most Water
·
PS/LeetCode
문제https://leetcode.com/problems/container-with-most-water/description/입력n == height.length2 결과ans: Int = 물을 담을 수 있는 최대 면적해석백준에서 풀어봤던 기억이 있었던 것 같다.위 문제 역시 전형적인 투 포인터 형식이므로 포인터를 이동시키는 조건을 빠르게 찾는다.두 포인터를 양쪽 끝에 위치 시키고 높이가 낮은 것을 옮긴다. 이유는 담을 수 있는 높이는 두 높이 중 최소 높이로 측정되므로 낮은 높이를 옮겨 다음 검사에서는 더 높은높이를 확보하는 것 코드class Solution { func maxArea(_ height: [Int]) -> Int { let n = height.count va..
3Sum
·
PS/LeetCode
문제https://leetcode.com/problems/3sum/description/입력3 결과ans: [[Int]] = 중복되지 않은 3개 숫자의 합이 0이되는 조합 배열 ex) [[-1,-1,2],[-1,0,1]]해석2포인터 개념에 하나의 트릭을 숨겨논 문제로 해석된다.3개의 합이 0이되는 지 검사해야하는데 2포인터로 접근하려면 어떻게야할까 ?? 간단하게 한개를 고정하고 나머지 2개만 움직이면 된다. 배열의 길이가 최대 3000이므로 정렬을 통해 조금 더 쉽게 포인터를 움직일 수 있는 전처리를 수행한 후 중복이 허용되지 않으므로 같은 값이 있을 경우 과감히 다음 값으로 넘어간다. 여기서 내가 고정할 값은 i 이며 , j를 바로 i 다음, j를 오른쪽 끝에서 시작해서 조건에 맞게 움직이자.코드cla..
Search in Rotated Sorted Array
·
PS/LeetCode
문제https://leetcode.com/problems/search-in-rotated-sorted-array/description/입력1 결과ans: Int = target이 위치한 인덱스, 먄약 없다면 -1해석이전 문제와 비슷한 이분탐색 문제지만 오름차순의 배열이 회전되어 있어 한번 더 조건을 걸어줘야한다. 그 조건은 이분탐색의 필수적인 조건인 정렬 여부, 즉 mid를 중심으로 정렬이 올바르게 되어있는 구간인가 아닌가를  판별 또한 mid를 통해 찾을 것이기 때문에, while문의 조건이 가 아닌 된다.코드class Solution { func search(_ nums: [Int], _ target: Int) -> Int { let n = nums.count var ..
Find Minimum in Rotated Sorted Array
·
PS/LeetCode
문제https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/description/입력n == nums.length1 결과ans: Int = 배열의 최솟값해석정렬이 됐지만 회전까지 들어가 있어 문제의 본질을 파악하는데 함정을 파뒀다.하지만 시간 복잡도 제약이 O(logn)인 것을 보고 이분 탐색이라는 것을 눈치 챌 수 있었다. mid를 기준으로 right 값이 큰지 작은 지를 판단하여크다면 오른쪽 부분은 버려주는 형식으로 진행코드class Solution { func findMin(_ nums: [Int]) -> Int { let n = nums.count if n == 1{ return n..
Maximum Product Subarray
·
PS/LeetCode
문제https://leetcode.com/problems/maximum-product-subarray/description/입력1 결과ans: Int = 곱 부분 배열의 최댓값해석이전 maxSubarray는 단순 합이라, 흐름이 하나였지만곱은 말 그대로 음수와 양수에 따른 흐름이 2개이므로 변수가 하나 더 필요했다.그래서 음수를 고려한 최대 음수 변수와, 최대 양수 변수를 계속 가져가며 반복마다 갱신한다.코드class Solution { func maxProduct(_ nums: [Int]) -> Int { let n = nums.count if n == 1 { return nums[0] } var minProduct = nums..
Maximum Subarray
·
PS/LeetCode
문제https://leetcode.com/problems/maximum-subarray/description/입력1 결과ans: Int = 가장 큰 부분수열의 합해석누적합이 현재 값보다 작으면, 이전 누적합을 버리고 그렇지 않으면 계속 누적한다.이 때 누적할 때마다 이전의 최대값과 계속 비교해서 저장한다.코드class Solution { func maxSubArray(_ nums: [Int]) -> Int { let len = nums.count var currentMax = nums[0] // 누적합 var ans = nums[0] // 최종 결과 for i in 1..