日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[LCP28] 采购方案

發布時間:2024/9/27 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [LCP28] 采购方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LCP 28 采購方案

1.題目

小力將 N 個零件的報價存于數組 nums。小力預算為 target,假定小力僅購買兩個零件,要求購買零件的花費不超過預算,請問他有多少種采購方案。

注意:答案需要以 1e9 + 7 (1000000007) 為底取模,如:計算初始結果為:1000000008,請返回 1

2.解題思路

從題目給的注意和數據量來看,暴力循環一定是不行的。因此代替暴力循環最常見的方法就是雙指針。

首先分析題目:輸入是數組和預算目標值。輸出的是數組中任意選取兩個數相加可以小于目標值的所有方案。因此很容易想到需要對數組做一次排序。

step1. 數組升序排序(qsort)

step2. 設置左指針在有序數組左端,右指針在有序數組右端

step3. 以左指針為外循環基準,左移右指針。當左指針 + 右指針的值恰好小于目標值時,從左指針到右指針之間的所有數據則都滿足要求,則統計完當前左指針下,滿足條件的方案。

step4. 然后右移一次左指針,右指針在當前位置下積蓄左移,重復step3統計累計所有方案(這時,右指針不需要從最右端重新再刷新了,因為左指針向右移動后,一定滿足 nums[left] + nums[right] <= nums[left + 1] + nums[right])

step5. 結束條件:當左指針和右指針相遇以后,左右指針之間的數據量為負數,則不符合常理,退出循環。

3.數據結構與算法

算法:排序算法+雙指針

4.排序算法 + 雙指針

int sort_up(const void *a, const void *b) {return *(int *)a - *(int *)b; } int purchasePlans(int* nums, int numsSize, int target){qsort(nums, numsSize, sizeof(nums[0]), sort_up);int left = 0;int right = numsSize - 1;long long sum = 0;while (left < right) {if (nums[right] + nums[left] > target)right--;else {sum += (long long)(right - left);left++;c}}sum = (int) (sum % (1000000007));return sum; }

總結

以上是生活随笔為你收集整理的[LCP28] 采购方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。