2024/07/09 5

[SlidingWindow][Medium] 3. Longest Substring Without Repeating Characters

https://leetcode.com/problems/longest-substring-without-repeating-characters/description/ 문자열이 주어질 때, char의 중복이 없는 가장 긴 sub string의 길이를 구하라.  전형적인 sliding window 문제. 중복이 생기면 중복이 제거될 때까지 right를 당긴다.  코드 더보기int lengthOfLongestSubstring(string s) { int left = 0, right = 0; set setBuff; int maxLen = 0; for (; right   결과

Leetcode/NeetCode 2024.07.09

[SlidingWindow][Easy] 121. Best Time to Buy and Sell Stock

https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/ 주식 가격이 주어진다. 이때 어느 하루에 사고, 어느 다른 하루에 판다면, 이 수익의 최대값을 구하라. 파는 날은 반드시 사는 날과 다른 이후의 날이어야 한다. 사는 날은 최대한 싸면 큰 차익의 결과가 기대될 것이다. 따라서 최소값에서 사고, 알수 없는 모든 값들에 대해 차(수익)의 최대값을 구한다. 코드 더보기int maxProfit(vector& prices) { if (prices.size()   결과

Leetcode/NeetCode 2024.07.09

[TwoPointers][Medium] 11. Container With Most Water

https://leetcode.com/problems/container-with-most-water/description/ 아래와 같이 수조가 있으며, 이때 높이의 배열이 주어진다. 물을 가장 많이 담은 때의 물의 면적을 구하라.  양 수조의 기둥을 좁히며 면적을 구한다. 면적은 간단히 구할 수 있다. 문제는 좁히는 방법이다. 양옆 기둥의 높이 중, 작은 쪽을 변경시켜 더 큰 결과를 얻는 것을 유도한다.  코드. 더보기int maxArea(vector& height) { int left = 0; int right = height.size() - 1; int maxArea = 0; while (left height[right]) --right; ..

Leetcode/NeetCode 2024.07.09

[TwoPointers][Medium] 15. 3Sum

https://leetcode.com/problems/3sum/description/  정수 배열이 주어질 때, 세 수의 합이 0 이 되는 수를 찾아라. 우선 정렬이 필요하다. 다음으로 첫수를 정하고, 그 뒤로는 두 수의 합을 구하는 로직과 같다.  다만, 중복이 없어야 하므로, 이는 여러 방법을 사용할 수 있겠다.  코드  더보기vector> threeSum(vector& nums) { sort(nums.begin(), nums.end()); vector> vRet; set vBuff; for (int q = 0; q { num0, nums[left], nums[right] }); vBuff.insert(temp); } ..

Leetcode/NeetCode 2024.07.09

[TwoPointers][Medium] 167. Two Sum II - Input Array Is Sorted

https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/description/ 주어진 정수 배열이 정렬되어 있을 때, 두 수의 합이 target이 되는 1based index를 출력하라. 정렬되어 있으므로, left, right를 이용하여 수의 범위를 좁힌다. target보다 sum이 크면 작아져야 하므로, right를 낮춘다. target보다 sum이 작으면 커져야 하므로, left를 높힌다.  코드 더보기vector twoSum(vector& numbers, int target) { int left = 0; int right = numbers.size() - 1; vector vRet; while (left { left+1..

Leetcode/NeetCode 2024.07.09