Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions raejun/MajorityElement.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function (nums) {
if (nums.length === 1) return nums[0];

nums.sort((a, b) => a - b);

let start = nums.at(0);
const end = nums.at(-1);

let max = 0;

for (let i = 1; i < nums.length; i++) {
if (start !== nums[i]) {
if (i > max) max = i;

start = nums[i];
} else if (end === nums[i]) {
if (nums.length - i > max) max = nums.length - i;

break;
}
}

return nums[max];
};

/*
문제 풀지 못함.

시간 복잡도는 O(n log n)이다.

배열을 정렬한 후에 풀이하려고 했다.
배열을 정렬한 후에, start와 end를 이용해서 풀이하려고 했다.
start는 배열의 첫 번째 요소로 초기화하고, end는 배열의 마지막 요소로 초기화했다.
배열을 순회하면서 start와 다른 요소가 나오면, 그 요소로 start를 업데이트하고, max를 업데이트했다.
end와 같은 요소가 나오면, max를 업데이트하고 반복문을 종료했다.

max의 역할을 헷갈려 풀이를 하지 못하였다.
그냥 Map을 이용해서 요소의 개수를 세는 방식으로 풀이하면 더 간단하게 풀이할 수 있었을 것 같다.
*/
38 changes: 38 additions & 0 deletions raejun/ReverseLinkedList.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function (head) {
let newHead = new ListNode(head.val);

head = head.next;

while (head) {
let tmp = newHead;

newHead = head;
newHead.next = tmp;
head = head.next;
}

return newHead;
};

/*
문제 풀지 못함.

시간 복잡도는 O(n)이다.

새로운 노드를 생성해서 링크드 리스트를 방식으로 풀이하려고 했다.
head = head.next 한 뒤에, 그 다음 루프에서 head = head.next를 할 때 이미 head.next를 바꿔버려 문제가 생긴다.
다른 사람들의 풀이를 보면, prev, cur, next를 이용해서 풀이한 것을 볼 수 있다.
prev는 이전 노드를 가리키고, cur는 현재 노드를 가리키고, next는 다음 노드를 가리킨다.
루프를 돌면서 cur.next를 prev로 바꿔주고, prev와 cur를 한 칸씩 이동시키는 방식으로 풀이한다.
*/