做流媒體視頻播放網(wǎng)站求助市場(chǎng)營銷考試題目及答案2022
文章目錄
- 理論基礎(chǔ)
- 分發(fā)餅干
- 思路:
- 代碼:
- 擺動(dòng)序列
- 思路一 貪心算法:
- 代碼:
- 思路二:動(dòng)態(tài)規(guī)劃(想不清楚)
- 代碼:
- 最大子序和
- 思路:
- 代碼:
理論基礎(chǔ)
貪心算法其實(shí)就是沒有什么規(guī)律可言,所以大家了解貪心算法 就了解它沒有規(guī)律的本質(zhì)就夠了。
不用花心思去研究其規(guī)律, 沒有思路就立刻看題解。
基本貪心的題目 有兩個(gè)極端,要不就是特簡單,要不就是死活想不出來。
學(xué)完貪心之后再去看動(dòng)態(tài)規(guī)劃,就會(huì)了解貪心和動(dòng)規(guī)的區(qū)別
分發(fā)餅干
添加鏈接描述
思路:
從代碼中可以看出我用了一個(gè) index 來控制餅干數(shù)組的遍歷,遍歷餅干并沒有再起一個(gè) for 循環(huán),而是采用自減的方式,這也是常用的技巧。
有的同學(xué)看到要遍歷兩個(gè)數(shù)組,就想到用兩個(gè) for 循環(huán),那樣邏輯其實(shí)就復(fù)雜了。
代碼:
class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int start = s.length-1;//餅干的下標(biāo)int res=0;for(int i=g.length-1;i>=0;i--){// 循環(huán)判斷if(start>=0&&s[start]>=g[i]){res++;start--;}}return res;}
}
擺動(dòng)序列
思路一 貪心算法:
代碼:
class Solution {public int wiggleMaxLength(int[] nums) {if (nums.length <= 1) {return nums.length;}//當(dāng)前差值int curDiff = 0;//上一個(gè)差值int preDiff = 0;int count = 1;//默認(rèn)最右邊是峰值for (int i = 0; i < nums.length-1; i++) {//得到當(dāng)前差值curDiff = nums[i+1] - nums[i];//如果當(dāng)前差值和上一個(gè)差值為一正一負(fù)//等于0的情況表示初始時(shí)的preDiffif ((curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0)) {count++;preDiff = curDiff;}}return count;}
}
思路二:動(dòng)態(tài)規(guī)劃(想不清楚)
代碼:
class Solution {public int wiggleMaxLength(int[] nums) {// 0 i 作為波峰的最大長度// 1 i 作為波谷的最大長度int dp[][] = new int[nums.length][2];dp[0][0] = dp[0][1] = 1;for (int i = 1; i < nums.length; i++){//i 自己可以成為波峰或者波谷dp[i][0] = dp[i][1] = 1;for (int j = 0; j < i; j++){if (nums[j] > nums[i]){// i 是波谷dp[i][1] = Math.max(dp[i][1], dp[j][0] + 1);}if (nums[j] < nums[i]){// i 是波峰dp[i][0] = Math.max(dp[i][0], dp[j][1] + 1);}}}return Math.max(dp[nums.length - 1][0], dp[nums.length - 1][1]);}
最大子序和
思路:
代碼:
class Solution {public int maxSubArray(int[] nums) {int sum = Integer.MIN_VALUE;int count = 0;for(int i=0;i<nums.length;i++){count+=nums[i];//?來判斷是否結(jié)果是負(fù)數(shù)sum=Math.max(sum,count);// 取區(qū)間累計(jì)的最大值(相當(dāng)于不斷確定最大子序終止位置)if(count<0){//重置起始位置count=0;}}return sum;}
}