Leetcode 最小調整數+滑動視窗遞增子序列
給定一個長度為N的陣列,以及一個乘積值B,每次只能對一個數增大或減少一個單位,問最少多少次使得陣列乘積為B
【思路】
要使得調整的次數最少,那麼最開始調整的那個數字,應該是最小的數。
貪心策略:選最小的數調整,其它部分數乘積最大(自己需要調整的偏移值就儘可能小)
先對原先陣列從小到大排序。
對於k 如果 B%k==0 =》 B=B/k 即如果能整除,那麼直接整除
如果B%k!=0 =》 不能整除 那麼 a[k]-- (即調整一次 因為最差情況下a[k] 調整為1 那麼一定能整除)
直到k=>N
int fun(vector<int> arr,int b)
{
int count=0;
for(int i=0;i<arr.size();i++)
{
if(b%arr[i]==0)
{
b/=arr[i];
}
else
{
arr[i]--;
count++;
i--;
}
}
}
【特殊連續遞增序列】
給定一個序列,求這樣的一個完美序列,是一個連續的子序列,並且序列中每一個數都大於等於前面所有數字之和。
基本思路:
滑動視窗,left=1 right=1 維護一個sum變數表示視窗中前面k-1個的和:
- 若當前視窗滿足 arr[right]>=sum 那麼 更新res sum+=arr[right] 同時right++
- 若當前視窗不滿足 視窗左邊縮減 同時 sum-=arr[left] 那麼left++
易錯點:
原本思路是 add[k]存放前面k個數字之和,那麼求解區間直接相減: add[right]-add[left-1] =》 add會加法溢位
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n;
cin>>n;
int k;
for(int i=0;i<n;i++)
{
cin>>k;
vector<long long> arr(k+1,0);
arr[0]=0;
//完成初始化
for(int j=1;j<=k;j++)
cin>>arr[j];
int left=1;
int right=1;
long long sum=0; //滑動視窗內之和
int ans=0;
while(right<=k)
{
if(arr[right]>=sum) //滿足
{
ans=max(ans,right-left+1); //記錄下符合要求視窗的長度
sum+=arr[right];
right++; //,滿足連續遞增
}
else
{
sum-=arr[left];
left++;
}
}
cout<<ans<<endl;
}
}
相關文章
- [leetcode 中等 動態規劃]673. 最長遞增子序列的個數 [leetcode 簡單 滑動視窗] 674. 最長連續遞增序列 [筆試]陣列的遞增子陣列序列LeetCode動態規劃筆試陣列
- Leetcode 題解系列 -- 和為s的連續正數序列(滑動視窗)LeetCode
- 滑動視窗法——Leetcode例題LeetCode
- 最長遞增子序列
- Leetcode-300. 最長遞增子序列LeetCode
- LeetCode300.最長遞增子序列LeetCode
- 「LeetCode Top100」之滑動視窗LeetCode
- 673. 最長遞增子序列的個數
- Sentinel 原理-滑動視窗
- 細聊滑動視窗
- 對滑動視窗單調性的一點思考
- Leetcode 300 最長遞增子序列(LIS板題)LeetCode
- 【修訂版】Leetcode 300 最長遞增子序列LeetCode
- leetcode力扣 300. 最長遞增子序列LeetCode力扣
- LeetCode 239. 滑動視窗最大值LeetCode
- 由序列檢測啟發:資料流滑動視窗操作
- 滑動視窗演算法演算法
- 最長遞增子序列-Java 實現Java
- TCP 流量控制-滑動視窗TCP
- 滑動視窗演算法思路演算法
- Sentinel滑動視窗演算法演算法
- 滑動視窗分析SQL實踐SQL
- 滑動視窗問題總結
- 滑動視窗與雙指標指標
- Flink的滾動視窗、會話視窗、滑動視窗及其應用會話
- mysql視窗函式中的滑動視窗MySql函式
- Golang的滑動視窗計數器Redis限速實現GolangRedis
- (轉)leetcode:Find All Anagrams in a String 滑動視窗方法總結LeetCode
- 自己實現一個滑動視窗
- 力扣刷題-滑動視窗(字串)力扣字串
- WeetCode2滑動視窗系列
- 239. 滑動視窗最大值
- TCP的滑動視窗和擁塞控制TCP
- [Leetcode]雙項佇列解決滑動視窗最大值難題LeetCode佇列
- leetcode刷題記錄:演算法(三)滑動視窗演算法LeetCode演算法
- 程式碼隨想錄陣列二刷:長度最小的子陣列(滑動視窗)陣列
- Hive實戰—時間滑動視窗計算Hive
- 氣球遊戲騰訊面試題滑動視窗解法遊戲面試題