iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
自我挑戰組

非資工本科的Leetcode刷題筆記系列 第 5

Day 5 - Arrays 101 - Problem 1

  • 分享至 

  • xImage
  •  

雖然說Arrays 101 都只有出Easy 的題目給讀者寫,但對初學者來說也是需要花費一點時間解題,而我本來是想跳過題目講解,直接開始下一個Explore Card 的學習,不過想說寫完又沒有複習的話可能會忘記,就還是水個幾篇文章~~

485. Max Consecutive Ones

題目

Input 是一個二元陣列,也就是裡面元素只有01,陣列長度在1到105之間。
Output 要陣列中,最多連續幾個1

Example 1:

Input: nums = [1,1,0,1,1,1]
Output: 3
Explanation: The first two digits or the last three digits are consecutive 1s. The maximum number of consecutive 1s is 3.

Example 2:

Input: nums = [1,0,1,1,0,1]
Output: 2

解法(Java)

這應該是最簡單的題目之一吧,只要用兩個變數去儲存最大值目前統計值,迴圈跑一次就結束了。

Runtime: 2 ms
Memory Usage: 44.2 MB

class Solution {
    public int findMaxConsecutiveOnes(int[] nums) {
        int max = 0, temp = 0;
        for (int num: nums) {
            if (num == 1) {
                temp++;
            } else {
                max = max > temp ? max : temp;
                temp = 0;
            }
        }
        
        return max > temp ? max : temp;
    }
}

1295. Find Numbers with Even Number of Digits

題目

Input 是一個整數陣列,陣列長度在1到500之間,陣列元素大小在1到105之間。
Output 要統計裡面的元素有幾個是偶數位數。

Example 1:

Input: nums = [12,345,2,6,7896]
Output: 2
Explanation:
12 contains 2 digits (even number of digits).
345 contains 3 digits (odd number of digits).
2 contains 1 digit (odd number of digits).
6 contains 1 digit (odd number of digits).
7896 contains 4 digits (even number of digits).
Therefore only 12 and 7896 contain an even number of digits.

Example 2:

Input: nums = [555,901,482,1771]
Output: 1
Explanation:
Only 1771 contains an even number of digits.

解法(Java)

剛看到題目可能會不知道什麼是偶數位數,但看過範例應該就知道意思了,解題思路跟上一題差不多。

Runtime: 1 ms
Memory Usage: 42.2 MB

class Solution {
    public int findNumbers(int[] nums) {
        int count = 0;
        for (int num: nums) {
            if (devide(num)) {
                count++;
            }
        }
        
        return count;
    }
    
    private boolean devide(int num) {
        int counter = 0;
        while (num != 0) {
            num /= 10;
            counter++;
        }
        return counter % 2 == 0;
    }
}

977. Squares of a Sorted Array

題目

Input 是一個整數陣列,陣列長度介於1至10^4之間,陣列元素大小介於-10^4至10^4之間。
Output 要一個整數陣列,內容是Input 陣列每個元素平方並且按照大小排序。

Example 1:

Input: nums = [-4,-1,0,3,10]
Output: [0,1,9,16,100]
Explanation: After squaring, the array becomes [16,1,0,9,100].
After sorting, it becomes [0,1,9,16,100].

Example 2:

Input: nums = [-7,-3,2,3,11]
Output: [4,9,9,49,121]

解法(Java)

這題有個Follow up,大意就是用一個新陣列找出O(n)的解法。

用新陣列的話,就只要一直把舊陣列的開頭和尾端拿出來平方後比較,比較大的就從新陣列的尾端向前逐一新增,這樣就可以在O(n)內解完。

Runtime: 1 ms
Memory Usage: 44.8 MB

class Solution {
    public int[] sortedSquares(int[] nums) {
        int len = nums.length;
        int[] result = new int[len];
        for (int left = 0, right = len - 1, index = len - 1; index >= 0; index--) {
            int leftNum = nums[left] * nums[left];
            int rightNum = nums[right] * nums[right];
            
            if (leftNum > rightNum) {
                result[index] = leftNum;
                left++;
            } else {
                result[index] = rightNum;
                right--;
            }
        }
        
        return result;
    }
}

小結

這三道題目都不難,當作入門練習題還不錯,不過最近工作開始忙了,不知道鐵人賽能不能撐住...

/images/emoticon/emoticon04.gif


上一篇
Day 4 - Arrays 101 - In-Place Operation
下一篇
Day 6 - Arrays 101 - Problem 2
系列文
非資工本科的Leetcode刷題筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言