😁演算法小白歡迎加入此社區:https://bbs.csdn.net/forums/hero?category=0
由英雄大佬帶領的抱團學演算法隊伍,從0開始,期待你的加入🥳

本博文是對此文章習題所作的題解,如有不足,請多指教:https://blog.csdn.net/WhereIsHeroFrom/article/details/121174370
今日題解:
第一題:https://leetcode-cn.com/problems/max-consecutive-ones/

直接遍歷,符合相應的條件就讓對應的個數相加,
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int number = 0;
int count = 0;
for(int i = 0; i < nums.length; i++){
if(nums[i] == 1){
count++;
number = Math.max(number, count);
}else{
count = 0;
}
}
return number;
}
}

第二題:https://leetcode-cn.com/problems/maximum-product-of-two-elements-in-an-array/

直接用sort函式排序,然后我們把陣列里面的每一位的數字先減去一,然后我們一定知道最大值就出現在最后兩位,
class Solution {
public int maxProduct(int[] nums) {
Arrays.sort(nums);
int i,max;
for(i=0; i<nums.length; i++){
nums[i] = nums[i] - 1;
}
int len = nums.length;
max = nums[len-1] * nums[len-2];
return max;
}
}

第三題:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/


一步解決,直接重拳出擊!
class Solution {
public int findMin(int[] nums) {
Arrays.sort(nums);
return nums[0];
}
}

或者使用二分法,無非就是用中間的值與兩邊的關系,因為題里面說了這個陣列原來是升序的,所以我們不管怎么轉,一定是要考慮中間的那個數字和左右兩邊的關系,比如中間的數字比右邊的數字大,是不是我們的開始那個最小的數字在我們的此時中間值與最右端之間,
class Solution {
public int findMin(int[] nums) {
int low = 0, high = nums.length-1;
while(low < high){
int mid = low + (high - low)/2;
if(nums[mid] <= nums[high]){
high = mid;
}else{
low = mid+1;
}
}
return nums[low];
}
}

第四題:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/

一樣的題目,這里直接重拳出擊了,
class Solution {
public int findMin(int[] nums) {
Arrays.sort(nums);
return nums[0];
}
}

第五題:https://leetcode-cn.com/problems/third-maximum-number/

對于重復的元素處理沒有想到快速的方法,參考了一位大佬的想法,先去重,再排序,針對陣列里面的元素個數進行分類討論,
class Solution {
public int thirdMax(int[] nums) {
Set set= new HashSet();//發生多型(Set集合具有互異性)
for (int i:nums) {
set.add(i);
}
Object[] array=set.toArray();
Arrays.sort(array);
int len=array.length;
if(len>=3){
return (int) array[len-3];
}
return (int) array[len-1];
}
}

第六題:https://leetcode-cn.com/problems/maximum-product-of-three-numbers/

三個數的最值,那么就要考慮是否含有負數,我們可以先對陣列進行升序排序,如果我們的陣列開始沒有負數,或者只有一個負數,那么我們可以確定,最值出現在最后三位,但是如果有兩個負數,或者三個甚至更多,我們可以確定,兩個負數才可以誕生一個正數,所以我們只需要判斷排序完后的前兩位和最后一位的乘積與最后三位的乘積大小,
class Solution {
public int maximumProduct(int[] nums) {
Arrays.sort(nums);
int max = nums[nums.length-1]*nums[nums.length-2]*nums[nums.length-3];
int maxn = nums[0]*nums[1]*nums[nums.length-1];
if(max > maxn){
return max;
}else{
return maxn;
}
}
}

有問題歡迎留言,歡迎加入“萬人千題”社區,在這里一起努力,
(今日立冬,今日大雪)

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/353377.html
標籤:java
