diff --git a/maximum-subarray/YuuuuuuYu.java b/maximum-subarray/YuuuuuuYu.java new file mode 100644 index 0000000000..92be99d01f --- /dev/null +++ b/maximum-subarray/YuuuuuuYu.java @@ -0,0 +1,24 @@ +/** + * Runtime: 1ms + * Time Complexity: O(n) + * + * Memory: 76.88MB + * Space Complexity: O(1) + * + * Approach: 카데인 알고리즘 + * - 부분 배열의 합이 최대가 되는 값을 찾는 알고리즘 + * 1) 이전 합보다 현재 숫자가 더 크면 현재 숫자로 sum을 초기화 + */ +class Solution { + public int maxSubArray(int[] nums) { + int sum = nums[0]; + int max = nums[0]; + + for (int i=1; i 1) { + count += n%2; + n /= 2; + } + + return count+1; + } +} diff --git a/valid-palindrome/YuuuuuuYu.java b/valid-palindrome/YuuuuuuYu.java new file mode 100644 index 0000000000..3859e55c65 --- /dev/null +++ b/valid-palindrome/YuuuuuuYu.java @@ -0,0 +1,37 @@ +/** + * Runtime: 2ms + * Time Complexity: O(n) + * + * Memory: 44.29MB + * Space Complexity: O(1) + * + * Approach: 투 포인터 + * 1) 문자열의 양 끝에서부터 시작하는 두 포인터를 설정 + * 2) 포인터가 가리키는 문자가 영숫자가 아닌 경우, 해당 포인터를 이동 + */ +class Solution { + public boolean isPalindrome(String s) { + int start = 0; + int end = s.length()-1; + + while (start < end) { + char currLeft = s.charAt(start); + char currRight = s.charAt(end); + + if (!Character.isLetterOrDigit(currLeft)) { + start++; + } else if (!Character.isLetterOrDigit(currRight)) { + end--; + } else { + if (Character.toLowerCase(currLeft) != Character.toLowerCase(currRight)) { + return false; + } + + start++; + end--; + } + } + + return true; + } +}