1.leetcode.1913--兩個數對之間的最大乘積差

看到英雄哥命名為貪心,我去搜索了幾個視頻了解了一下思想,其實沒學也是可以做的,我們在解決的時候主要點是找到最大的數對和最小的數對
class Solution{
pubilc int jie(int [] nums)
{
int i,j,m;
Arrays.sort(nums);//對陣列進行排序
i=nums.length;
return (nums[i-1]*nums[i-2])-(nums[0]*nums[1]);//排序后的陣列最小的2個數就是第一個元素和第二個元素,同理最大的數的位置是最后一個和倒數第二個
}
}
2.leetcode.976--三角形的最大周長
下面來看一個錯誤的代碼

- 剛開始我想著排序完取最大的三個數進行判斷,如果滿足三角形的定理就回傳他們的和,但是忽略了當最大的三個數不滿足的時候,其他也可能存在3個數滿足,比如錯誤的案例上所給的[2,2,3,6].
-
class Solution{ public int jie( int [] nums) { int i,j; Arrays.sort(nums); i=nums.length; for(i=nums.length;i>=3;i--)//在原來的基礎上加一個回圈,可以不斷的更新最大的3個數作為一組去判斷 { if(((nums[i-3]+nums[i-2])>nums[i-1])&&((nums[i-1]-nums[i-2])<nums[i-3])) return nums[i-1]+nums[i-2]+nums[i-3]; } return 0; } }3.leetcode.561--陣列拆分
-

class Solution{ public int jie(int [] nums) { int i=0,num=0; for(i=0;i<nums.length;i=i+2) { num=num+nums[i]; } return num; } }這里我們需要將陣列進行排序后,取奇數位,也就是第一個,第三個,第五個,以此類推,將其相加,但是陣列下標是從0開始的哈,
4.leetcode.
class Solution{
public int jie(int [] nums,int limit)
{
Arrays.sort(nums);
//排序后就方便我們去處理這道問題了,如果最小的和最重的加起來超過limit,只能載最重的那個人過,再把上一次的最小的和下一次的最大的去比較
int a=0,num=0;//a用來表示每次判斷的陣列的第一個元素,也就是最小的
int c;
c=nums.length-1;//注意:我們這里是用表示陣列的最后一個元素,我學jave沒多久,這個地方總容易搞錯,哈哈
while(a<=c)
{
if(a==c)//a和c相遇,說明是同一個人
{
num++;
break;
}
if((nums[a]+nums[c])>limit)
{
num++;
c--;//說明重的那個太重了,我們使用的船數加1,大的元素的下標往前移一位(可以理解為胖子坐船跑了哈哈)
}
else
{
num++;
c--;
a++;
}
}
return num;
}
}

總結:以上英雄哥推出的打卡題都有很多相似之處,非常適合只有語言基礎的萌新去了解演算法思想,先水簡單題,養成習慣,不會的可以去翻看視頻,做好筆記,邊水題邊提升自己,
今天是九日集訓——雪國列車leetcode萌新零基礎打卡指南第八天,臨近期末考試了,不管山洪海嘯,明天也要堅持下去哦!
天道酬勤,勤能補拙,加油,萌新們!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/374839.html
標籤:其他
