国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

2023-07-15力扣每日一題

這篇具有很好參考價值的文章主要介紹了2023-07-15力扣每日一題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

鏈接:

18. 四數(shù)之和

題意:

一個數(shù)組n,一個目標值t,在數(shù)組內(nèi)找四個數(shù)字和等于t,求能有多少種組合

解:

0716:一看怎么昨天卡沒打,原來昨天做的第一題不是每日一題,麻了

n很小,200,那么先排序,然后弄一個雙指針開雙循環(huán)l,r,確定每個組合的最大數(shù)字-數(shù)字4和最小數(shù)字-數(shù)字1,然后計算t-num1-num4,就可以得到該組合對應(yīng)num2+num3 我們設(shè)為tL,然后再弄一個雙指針ll,rrl,r內(nèi)找,這時,由于數(shù)組已經(jīng)排序了,所以如果nums[ll]+nums[rr]<tL右移LL,如果nums[ll]+nums[rr]>tL左移RR

nums[ll]+nums[rr]==tL時,我們只需要將其和記錄結(jié)果的容器里最后一個比較是否相同就可以達到去重的效果(我直接用了暴力比較QWQ)

去重:

1、由于已經(jīng)排序,所以當新的L和上一個L相同時,跳過。相同數(shù)字第一個遇到的一定提供最大的范圍(即最小的L),比如 3,3,0,0,0,0…,取第一個3作為L,num2-4還可以選擇第二個3,和后面的所有數(shù)字;選取第二個3做為L,num2-4只能選擇后面的數(shù)字,所以選取第二個3做為L所推導(dǎo)的結(jié)果包含在取第一個3作為L的結(jié)果

2、現(xiàn)在已經(jīng)確定了該組合的第一個數(shù)字num1=nums[L],這邊要開第二重循環(huán)去選取第四個數(shù)字num4=nums[R],同樣,當新的R跟上一個R相同時,跳過,原因同 1

3、確定了num1和num4,再找num2和num3就很簡單了,上面也提過了,不用雙循環(huán),頂多遍歷一遍 l,r

4、由于num1逐漸增大且不重復(fù),在同一個num1下num4逐漸減小且不重復(fù),所以答案容器里末尾要么是不同的num1開頭,要么是相同的num1開頭不同的num4結(jié)尾,要么是相同的num1num4,前面兩種情況和現(xiàn)在明顯不相同,在第三種情況下,由于LL和RR的起始值固定,且移動方向固定(向數(shù)組中間),且數(shù)組有序,所以如果不和容器末尾相同,則在容器中一定不存在與之相同的答案

5、由此可知,容器中答案排序是:num1從小到大,num1相同時num4從大到小,num1和num4均相同時num2num3從兩邊到中間

實際代碼:

#include<bits/stdc++.h>
using namespace std;
bool comp(const vector<int>& A,const vector<int>& B)
{
    for(int i=0;i<4;i++)
    {
        if(A[i]!=B[i])return true;
    }
    return false;
}
vector<vector<int>> fourSum(vector<int>& nums, int target)
{
    sort(nums.begin(),nums.end());//先排序 
    //for(auto i:nums) cout<<i<<" ";
    //cout<<endl;
    vector<vector<int>>ans;int lg=nums.size();
    for(int l=0,r=lg-1;l<r;l++)
    {
        if(l && nums[l-1]==nums[l] )continue;//確定數(shù)字1 不重復(fù) 
        for(;l<r;r--)
        {
            if(r<lg-1 && nums[r+1]==nums[r]) continue;//確定數(shù)字4 在當前數(shù)字1不重復(fù) 
            //cout<<l<<"-N1-"<<r<<endl;
            long long targetL=(long long)target-nums[l]-nums[r];//新的目標 
            for(int ll=l+1,rr=r-1;ll<rr;)
            {
                //cout<<ll<<"-N2-"<<rr<<endl;
                long long now=(long long)nums[ll]+nums[rr];//當前值 
                if(now==targetL)
                {
                    vector<int>temp{nums[l],nums[ll],nums[rr],nums[r]};
                    //去重 
                    if(!ans.empty() && comp( temp,*(ans.rbegin()) )) ans.push_back(temp);
                    if(ans.empty()) ans.push_back(temp);
                    ll++;rr--;
                }
                else if(now<targetL) ll++;
                else rr--;
            }
        }
        r=lg-1;//重置右指針 
    }
    return ans;
}
int main()
{
    vector<int> nums;int target;
    cin>>target;int temp;
    while(cin>>temp)
    {
        nums.push_back(temp);
    }
    vector<vector<int>>ans=fourSum(nums,target);
    for(auto &i:ans)
    {
        for(auto j:i)
        {
            cout<<j<<" ";
        }
        cout<<endl;
    }
    return 0;
}

限制:文章來源地址http://www.zghlxwxcb.cn/news/detail-566853.html

  • 1 <= nums.length <= 200
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109

到了這里,關(guān)于2023-07-15力扣每日一題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 2023-07-14力扣每日一題

    鏈接: 979. 在二叉樹中分配硬幣 題意: 一個二叉樹,n個節(jié)點,節(jié)點 權(quán)值總和 為n, 每次 可以 相鄰節(jié)點 間移動 1 權(quán)值 求讓每個節(jié)點都為1的最少次數(shù) 解: 給定了一個樹的結(jié)構(gòu)體,先整一手DFS/BFS,n不大,隨便莽莽 首先每個節(jié)點只需要剩下1,而且可以知道 葉子節(jié)點 如果不

    2024年02月16日
    瀏覽(19)
  • 2023-07-16力扣每日一題

    鏈接: 834. 樹中距離之和 題意: 給定一個樹,有n個節(jié)點,需要得到每個節(jié)點與其他節(jié)點的距離和 解: 還以為是弗洛伊德,一看范圍3E4直接暈倒 想了四個小時,實在是想不出來了,看了一下評論里的轉(zhuǎn)移公式 設(shè) DP[i] 為節(jié)點 i 與其他節(jié)點的距離和, DP[F] 是節(jié)點 i 的父節(jié)點與

    2024年02月16日
    瀏覽(28)
  • 2023-07-11力扣每日一題

    2023-07-11力扣每日一題

    鏈接: https://leetcode.cn/problems/maximum-alternating-subsequence-sum/ 題意: 給定一個數(shù)組,求一個子序列,使這個子序列的 奇數(shù)位和-偶數(shù)位和 最大(下標從1開始的話|反正第一個數(shù)是+) 解: 找下坡,曲折處兩個分下坡大于一個總下坡(如圖) 實際代碼: 思維: DP?: 限制: 1 = nu

    2024年02月15日
    瀏覽(16)
  • 2023-07-29力扣每日一題

    鏈接: 141. 環(huán)形鏈表 題意: 求鏈表是否有環(huán) 解: 剛好昨天做完的初級算法鏈表題,翻轉(zhuǎn)和暴力 實際代碼: 限制: 鏈表中節(jié)點的數(shù)目范圍是 [0, 104] -105 = Node.val = 105 pos 為 -1 或者鏈表中的一個 有效索引 。

    2024年02月15日
    瀏覽(22)
  • 2023-07-18力扣每日一題-有點難

    鏈接: 1851. 包含每個查詢的最小區(qū)間 題意: 給定一個區(qū)間二維數(shù)組,有 N個[L,R] 區(qū)間(閉區(qū)間) 給定一組查詢,有 M個正整數(shù) ,求 存在于區(qū)間數(shù)組中的最小 R-L+1 滿足 L=M[i]=R 解: 本來 看標簽有個掃描線,想寫個差分,然后排序查詢整O(1)查詢的,沒寫出來QWQ,也不知道有沒

    2024年02月16日
    瀏覽(29)
  • 2023-07-26力扣每日一題-區(qū)間翻轉(zhuǎn)線段樹

    鏈接: 2569. 更新數(shù)組后處理求和查詢 題意: 給兩個等長數(shù)組nums1和nums2,三個操作: 操作1:將nums1的 [l,r] 翻轉(zhuǎn)(0變1,1變0) 操作2:將 nums2[any] 變成 nums2[any]+nums1[any]*p ,p由操作給出,any表示數(shù)組里的每一位 操作3:查詢nums2的和 解: 由于每次更新nums2的時候,不需要考慮

    2024年02月15日
    瀏覽(27)
  • 2023-08-15力扣每日一題

    鏈接: 833. 字符串中的查找與替換 題意: n組操作,其中第i組: 檢查 子字符串 sources[i] 是否出現(xiàn)在 原字符串 s 的索引 indices[i] 處。 如果沒有出現(xiàn), 什么也不做 。 如果出現(xiàn),則用 targets[i] 替換 該子字符串。 所有替換操作必須 同時 發(fā)生,這意味著替換操作不應(yīng)該影響彼此

    2024年02月12日
    瀏覽(22)
  • 2023-07-07 LeetCode每日一題(過橋的時間)

    點擊跳轉(zhuǎn)到題目位置 共有 k 位工人計劃將 n 個箱子從舊倉庫移動到新倉庫。給你兩個整數(shù) n 和 k,以及一個二維整數(shù)數(shù)組 time ,數(shù)組的大小為 k x 4 ,其中 time[i] = [leftToRighti, pickOldi, rightToLefti, putNewi] 。 一條河將兩座倉庫分隔,只能通過一座橋通行。舊倉庫位于河的右岸,新倉

    2024年02月15日
    瀏覽(25)
  • 【力扣每日一題】2023.7.15 四數(shù)之和

    【力扣每日一題】2023.7.15 四數(shù)之和

    這題和本月出過的每日一題:兩數(shù)之和,三數(shù)之和類似。 不夸張的說只要把三數(shù)之和的代碼拿來再套層for循環(huán)改改就可以了。 不過我這里還是簡單捋一捋思路,題目給一個數(shù)組,要求返回所有長度為4,總和為 target 的子數(shù)組(不用連續(xù))。 比較容易想到的是暴力解法,直接

    2024年02月16日
    瀏覽(20)
  • 2023-07-31 LeetCode每日一題(重排鏈表)

    2023-07-31 LeetCode每日一題(重排鏈表)

    點擊跳轉(zhuǎn)到題目位置 給定一個單鏈表 L 的頭節(jié)點 head ,單鏈表 L 表示為: 請將其重新排列后變?yōu)椋?不能只是單純的改變節(jié)點內(nèi)部的值,而是需要實際的進行節(jié)點交換。 示例 1: 示例 2: 提示: 鏈表的長度范圍為 [1, 5 * 10 4 ] 1 = node.val = 1000 (1) 使用 分治 的思路來解決問題。

    2024年02月14日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包