力扣1498. 滿足條件的子序列數目隨筆

“方生方死,方死方生。”——《莊子》

題目

給你一個整數數組?nums?和一個整數?target?。

請你統計并返回?nums?中能滿足其最小元素與最大元素的??小于或等于?target?的?非空?子序列的數目。

由于答案可能很大,請將結果對?10^9+7取余后返回。

難度:中等

分析

筆者受滑動數組的影響,一直想著固定右邊界,故而沒做出來,其實固定左邊界就行了💤。

由于此題求的是子序列的數組,與順序無關,需要判斷最小元素與最大元素,因此先對數組進行排序。我們遍歷數組,把當前的值nums[i]作為子序列的左邊界(必須取該值,不然會重復),則右邊界的值需滿足nums[j]<=target-nums[i]。因為數組已排序,我們使用二分查找找到最后一個滿足條件的下標j,不能取[j+1,]區間的值,否則會破壞條件,而[i+1,j]區間的值可取可不取,所以對于左邊界nums[i],一共有2^{j-i}種子序列。該冪運算結果可能非常大,故使用快速冪,將結果累加取余得到最終答案。

解答

class Solution {public int numSubseq(int[] nums, int target) {long ans=0;Arrays.sort(nums);for (int i=0;i<nums.length&&nums[i]*2<=target;i++){int pos=binarySearch(nums,target-nums[i])-1;long add=(pos>=i)?pow(2,pos-i,1000000007):0;ans=(ans+add)%1000000007;}return (int)ans;}private long pow(long x, long y, long MOD){long ans=1;while (y>0){if ((y&1)==1){ans=(ans*x)%MOD;}y>>=1;x=(x*x)%MOD;}return ans;}private int binarySearch(int[] nums, int target) {int low = 0, high = nums.length;while (low < high) {int mid = (high - low) / 2 + low;if (mid == nums.length) {return mid;}int num = nums[mid];if (num <= target) {low = mid + 1;} else {high = mid;}}return low;}
}

“有學問的傻瓜,要遠比無知的傻瓜還要愚蠢。”——伏爾泰

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912362.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912362.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912362.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

5.Docker安裝Tomcat

#官方的使用 docker run -it --rm tomcat:9.0 #我們之前使用docker run -d 某鏡像都是后來運行&#xff0c;容器停止之后&#xff0c;容器還能夠查詢到 而docker run -it -rm 是用完之后&#xff0c;容器刪除&#xff0c;鏡像還存在。 測試的時候可以用官方的 &#xff08…

企業事業政府單位智慧主題展廳素材管理平臺播放軟件

以下為企事業單位及政府智慧主題展廳素材管理平臺播放軟件的核心功能簡介&#xff0c;綜合多維度技術實現統一管控與智能展示&#xff1a; 一、內容資產管理 全格式素材支持? 兼容視頻、3D模型、圖文、AR/VR場景等多媒體格式&#xff0c;支持批量導入與云端存儲。 智能分類與…

Python+FastAPI的一些語法與問題解決

Q1:result await dbsession.execute(text(sql_context),params) 如何把result轉成key,value的字典列表 A1: 使用SQLAlchemy的mappings()方法獲取字典形式的結果集&#xff1a; result await db_session.execute(text(sql_context), params) dict_list [dict(row) for row…

Reactor并發無關性

Reactor&#xff0c;像 RxJava 一樣&#xff0c;可以被認為是 并發無關&#xff08;concurrency-agnostic&#xff09; 的。這意味著它不強制要求任何特定的并發模型&#xff0c;而是將選擇權交給開發者。換句話說&#xff0c;Reactor 不會強制你使用多線程或異步編程&#xff…

#華為昇騰#華為計算#昇騰開發者計劃2025#

#華為昇騰#華為計算#昇騰開發者計劃2025# 通過學習Ascend C算子開發的初級教程&#xff0c;通過課程講解及樣例實操&#xff0c;幫助我學習使用Ascend C開發自己的算子。收獲很大。 <新版開發者計劃>的內容鏈接&#xff1a;https://www.hiascend.com/developer-program_2…

FLOPS、FLOP/s、TOPS概念

在計算性能和硬件指標中&#xff0c;FLOPS、FLOP/s、TOPS 是常見的術語&#xff0c;但它們有明確的區別和應用場景。以下是詳細解析&#xff1a; 1. FLOPS&#xff08;Floating Point Operations per Second&#xff09; 定義&#xff1a; 每秒浮點運算次數&#xff08;Floati…

Windows所有系統自帶.NET Framework版本win7,win10,win11預裝.NET版本

Windows系統支持“.NET版本”匯總 本文詳細列出了Windows從NT4.0到Windows11各版本自帶的.NETFramework版本及對應最高兼容的.NETFramework版本&#xff0c;便于了解不同Windows系統之間的.NETFramework更新歷史。 以下匯總了Windows每個版本自帶的“.NET版本”&#xff0c;與…

Windows 下使用 nvm 管理 Node.js 多版本 —— 完整指南

Node.js 版本更新頻繁&#xff0c;不同項目可能依賴不同的版本&#xff0c;手動切換極為麻煩。nvm-windows 是專為 Windows 用戶開發的 Node.js 多版本管理工具&#xff0c;可以輕松地安裝、切換、卸載 Node.js 版本。 本篇將從下載到實際使用&#xff0c;手把手帶你玩轉 nvm-…

vue使用Element Plus UI框架

您好&#xff0c;艦長&#xff01;非常棒的選擇。功能是應用的骨架&#xff0c;而美觀的 UI 則是應用的靈魂和血肉。是時候為我們的飛船進行一次全面的“外觀升級”和“內飾裝修”了。 我們將集成一個在業界非常流行、功能強大的 Vue 3 組件庫——Element Plus。它將幫助我們快…

【ubuntu24.04】忘了自己把開機samba掛載的腳本放哪里了

從兩個方面來定位這幾個 Samba 掛載點&#xff1a; 一、查看當前已經掛載的 CIFS/SMB 文件系統 使用 mount mount | grep -i cifs或者 mount | grep -E (smb|cifs)這會列出所有當前活躍的 CIFS/SMB 掛載&#xff0c;比如&#xff1a; //192.168.1.100/share on /mnt/data type …

在 Windows 上使用 Docker Desktop 快速搭建本地 Kubernetes 環境(附詳細部署教程)

言簡意賅的講解Docker Desktop for Windows搭建Kubernetes解決的痛點 目標讀者&#xff1a; 對 Docker Desktop 有一定了解&#xff0c;能在 Windows 上成功安裝和使用 Docker Desktop。想要在本地快速搭建一套 Kubernetes 環境進行測試或學習的開發者。 一、準備工作 安裝 Doc…

dockercompose快速安裝ELK

第一步&#xff1a;環境準備 請確保您的機器上已經安裝了 Docker 和 Docker Compose。 第二步&#xff1a;創建項目目錄和配置文件 為了讓 Docker Compose 能夠正確地構建和管理容器&#xff0c;我們需要創建一個特定的目錄結構。 創建一個主目錄&#xff0c;例如 elk-stack。…

閑聊ARM內核參數傳遞機制

之前一直沒怎么在意這個問題&#xff0c;直到最近搞了個奇奇怪怪的項目&#xff0c;才發現這部分知識得補上來&#xff0c;記錄一下。 ARM有一個標準&#xff0c;叫《Procedure Call Standard for the Arm Architecture》&#xff0c;人話就是ARM架構過程調用標準&#xff0c;…

萬興喵影Filmora AI Video v14.7.03國際高級版,AI視頻剪輯全能工具,一鍵專業級創作?

[軟件名稱]: 萬興喵影Filmora AI Video v14.7.03 [軟件大小]: 199.4 MB [下載通道]: 夸克盤 | 迅雷盤 軟件介紹 &#x1f3ac;《萬興喵影》v14.7.03國際高級版&#xff5c;AI智能剪輯神器&#xff0c;解鎖全功能無水印&#xff01; ? 核心優勢&#xff1a; ? 1000背景音…

暴力風扇方案介紹

炎炎夏日&#xff0c;當普通風扇只能送來 “溫柔拂面”&#xff0c;暴力風扇卻能吹出 “臺風級” 清涼&#xff01;想知道這些 “風力狂魔” 是如何煉成的&#xff1f;答案藏在電機、電路和芯片的黃金三角組合里。? 一、電機&#xff1a;暴力風扇的 “心臟起搏器”? 暴力風扇…

pyqt小問題匯總

文章目錄 1、inherit global site-packages2、setGeometry(10,20,30,40)setGeometry(x, y, width, height)1. **x參數**2. **y參數**3. **width參數**4. **height參數** 示例說明與其他方法的對比注意事項示例代碼 1、inherit global site-packages 在pycharm 創建項目時&…

提升JavaScript性能的六大關鍵策略

1、優化代碼結構與算法 避免使用嵌套循環&#xff0c;改用更高效的算法如哈希表或二分查找。減少不必要的計算&#xff0c;緩存重復使用的計算結果。使用時間復雜度更低的算法替代高復雜度操作。優化遞歸調用&#xff0c;避免棧溢出和性能瓶頸。改用迭代或尾遞歸優化。簡化條件…

打造跨平臺應用的全能框架:Dioxus

在如今飛速發展的數字世界中,越來越多的開發者開始尋找能夠滿足跨平臺需求的高效框架。而在這些選擇中,Dioxus這個全棧應用框架脫穎而出。Dioxus是一款為Web、桌面和移動端開發而設計的全棧框架,采用Rust語言,具備跨平臺、一體化的優勢。本文將深入介紹Dioxus的獨特功能,應…

大事件項目記錄5-用戶接口開發-更新用戶頭像

5&#xff09;更新用戶頭像。 UserController.java&#xff1a; PatchMapping("updateAvatar")public Result updateAvatar(RequestParam String avatarUrl){userService.updateAvatar(avatarUrl);return Result.success();} UserService.java&#xff1a; UserServ…

Spring Cloud 微服務架構模型

下面是一個完整的 springcloud-eureka-demo 示例項目&#xff0c;包含&#xff1a; Eureka Server 注冊中心 Eureka Client 服務提供者&#xff08;service-provider&#xff09; Eureka Client 服務消費者&#xff08;service-consumer&#xff09; &#x1f4c1; 項目結構…