iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
0
Software Development

用JS來刷刷HackerRank系列 第 5

(6)HackerRank-Day 2: Loops,Day 3: Arrays(javaScript Answer)

題目
Day 2: Loops
舉例輸入

javascriptloops

舉例輸出

a
a
i
o
o
j
v
s
c
r
p
t
l
p
s

解析
這題就是要我們先把母音{a,e,i,o,u}提出來先印
然後接下來的字母後印看了很多文章看起來都是O(N^2)
如果可以一圈解決的還請賜教
因此我的解法應該是還可以的

function vowelsAndConsonants(s) {
    let vowel = ['a','e','i','o','u']
    let strArr = s.split('');
    let lowstr = strArr.filter(str => (vowel.includes(str)));
    let bigstr = strArr.filter(str => !(vowel.includes(str)));
    lowstr.forEach(str => console.log(str));
    bigstr.forEach(str => console.log(str));
}

可不可以更短?
可以

function vowelsAndConsonants(s) {
    let vowel = ['a','e','i','o','u']
    let strArr = s.split('');
    strArr.forEach(str => (vowel.includes(str)?console.log(str):""));
    strArr.forEach(str => (!(vowel.includes(str))?console.log(str):""));
}

其實差不多,就是少存點東西而已


題目
Day 3: Arrays
舉例輸入

5
2 3 6 6 5

舉例輸出

5

解析
找出第二大的數,這題我有想過如果可以先排序
然後開始找,是不是可以寫得更優雅?

arr.sort();
console.log(arr[arr.length-2])

這樣子就搞定了?結果想到如果最大的數如果有兩個不就爆了?
所以還要存一個數開始往前或往後開始找
而且這樣還要轉型,有時候JS轉型又很奇杷
這樣好像有點麻煩,不符合我的作風
因此我決定通通丟給js的原生碼幫我處理

function getSecondLargest(nums) {
    let Largest = Math.max(...nums);
    let second = 0;
    nums.forEach(num => {
        if (Largest > num && num > second) {
            second = num;
        }
    });
    return second;
}

本日心得
其實最後是有手賤的想把原本預想的東西完成
還真的差不多了
但工作實在太忙,因此留給大大你們完成吧
雖然還是有錯,但差一點點了(雖然看起來根本沒比上面短)

function getSecondLargest(nums) {
    nums = nums.map(num=>+num).sort();
    let second
    let max = nums[nums.length-1];
    for(let i=nums.length;i>=0;i--){
        if(nums[i]<max){       
             second = nums[i];
             break;
        } 
    }
    return second;
}

上一篇
(5)HackerRank-Day2:Conditional Statements: If-Else,Switch(javaScript Answer)
下一篇
(7)HackerRank-Day 3: Try, Catch, and Finally、Throw(javaScript Answer)
系列文
用JS來刷刷HackerRank29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言