์๊ณ ๋ฆฌ์ฆ์ ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ์ ์ด๋ป๊ฒ ์ ๊ทผํ ๊น?
์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ๋ค์ํ ๊ฐ๊ณผ ๋น๋๋ฅผ ์์งํ๋ค.
์๊ฐ๋ณต์ก๋ O(n^2)
function same(arr1, arr2){
if(arr1.length !== arr2.length){ return false;}
for(let i = 0; i < arr1.length; i++){
let correctIndex = arr2.indexOf(arr1[i] ** 2)
if(correctIndex === -1){
return false;
}
arr2.splice(correctIndex, 1)
}
return true;
}
์๊ฐ๋ณต์ก๋ O(n)
function same(arr1, arr2){
if(arr1.length !== arr2.length){ return false;}
let frequencyCounter1 = {}
let frequencyCounter2 = {}
for(let val of arr1){
frequencyCounter1[val] = (frequencyCounter1[val] || 0) + 1
}
for(let val of arr2){
frequencyCounter2[val] = (frequencyCounter2[val] || 0) + 1
}
for(let key in frequencyCounter1){
if(!(key ** 2 in frequencyCounter2)){
return false;
}
if(frequencyCounter2[key ** 2] !== frequencyCounter1[key]){
return false
}
}
return true;
}
์ธ๋ฑ์ค๋ ์์น์ ํด๋นํ๋ ํฌ์ธํฐ๋ ๊ฐ์ ๋ง๋ ๋ค์ ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ
์ค๊ฐ ์ง์ ์์๋ถํฐ ์์ ์ง์ ์ด๋ ๋ ์ง์ ์ด๋ ์์ชฝ ์ง์ ์ ํฅํด ์ด๋์ํค๋ ํจํด.
ํ ์์ ๊ฐ์ด๋ ์กฐ๊ฑด์ ์ถฉ์กฑ์ํค๋ ๋ฌด์ธ๊ฐ๋ฅผ ์ฐพ๋๋ค๋ ๊ฐ๋
.
์๊ฐ๋ณต์ก๋ O(n^2) ๊ณต๊ฐ๋ณต์ก๋ O(1)
function sumZero(arr){
for(let i = 0; i < arr.length; i++){
for(let j = i+1; j < arr.length; j++){
if(arr[i] + arr[j] === 0){
return [arr[i], arr[j]];
}
}
}
}
์๊ฐ๋ณต์ก๋ O(n) ๊ณต๊ฐ๋ณต์ก๋ O(1)
function sumZero(arr){
let left = 0;
let right = arr.length -1;
while(left < right){
let sum = arr[left] + arr[right];
if(sum === 0){
return [arr[left], arr[right]];
}else if(sum > 0){
right--;
}else{
left++;
}
}
}
๋ฐฐ์ด์ด๋ ๋ฌธ์์ด๊ณผ ๊ฐ์ ์ผ๋ จ์ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ๊ฑฐ๋
ํน์ ๋ฐฉ์์ผ๋ก ์ฐ์์ ์ธ ํด๋น ๋ฐ์ดํฐ์ ํ์ ์งํฉ์ ์ฐพ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค.
์๊ฐ๋ณต์ก๋ O(n^2)
function maxSubarraySum(arr, num){
if(num > arr.length) {
return null;
}
let max = -Infinity;
for(let i = 0; i < arr.length - num + 1; i++){
temp = 0;
for(let j = 0; j < num; j++){
temp += arr[i + j];
}
if(temp > max) {
max = temp;
}
}
return max;
}
์๊ฐ๋ณต์ก๋ O(n)
function maxSubarraySum(arr, num){
let maxSum = 0;
let tempSum = 0;
if(arr.length < num) return null;
for (let i = 0; i < num; i++){
maxSum += arr[i];
}
tempSum = maxSum;
for(let i = num; i < arr.length; i++){
tempSum = tempSum - arr[i - num] + arr[i];
maxSum = Math.max(maxSum, tempSum);
}
return maxSum;
}
๋ฐฐ์ด์ด๋ ๋ฌธ์์ด ๊ฐ์ ํฐ ๊ท๋ชจ์ ๋ฐ์ดํฐ์ ์ ์ฒ๋ฆฌ.
์๊ฐ๋ณต์ก๋ O(N)
function search(arr, val){
for(let i = 0; i < arr.length; i++){
if(arr[i] === val){
return i
}
}
return -1;
}
์๊ฐ๋ณต์ก๋ Log(N)-Binary search
function search(array, val){
let min = 0;
let max = array.length - 1;
while(min <= max) {
let middle = Math.floor((min + max) / 2);
let currentElement = array[middle];
if(array[middle] < val){
min = middle + 1;
}
else if(array[middle] > val){
max = middle - 1;
}
else{
return middle;
}
}
return -1;
}