雖然說Arrays 101 都只有出Easy 的題目給讀者寫,但對初學者來說也是需要花費一點時間解題,而我本來是想跳過題目講解,直接開始下一個Explore Card 的學習,不過想說寫完又沒有複習的話可能會忘記,就還是水個幾篇文章~~
Input 是一個二元陣列,也就是裡面元素只有0
和1
,陣列長度在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
這應該是最簡單的題目之一吧,只要用兩個變數去儲存最大值
跟目前統計值
,迴圈跑一次就結束了。
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;
}
}
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.
剛看到題目可能會不知道什麼是偶數位數
,但看過範例應該就知道意思了,解題思路跟上一題差不多。
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;
}
}
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]
這題有個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;
}
}
這三道題目都不難,當作入門練習題還不錯,不過最近工作開始忙了,不知道鐵人賽能不能撐住...