Leetcode - 雙周賽135

目錄

  • 一、3512. 使數組和能被 K 整除的最少操作次數
  • 二、3513. 不同 XOR 三元組的數目 I
  • 三、3514. 不同 XOR 三元組的數目 II
  • 四、3515. 帶權樹中的最短路徑

一、3512. 使數組和能被 K 整除的最少操作次數

題目鏈接
在這里插入圖片描述
本題實際上求的就是數組 nums 和的余數,代碼如下:

class Solution {public int minOperations(int[] nums, int k) {int s = 0;for(int x : nums){s += x;}return s % k;}
}

二、3513. 不同 XOR 三元組的數目 I

題目鏈接
在這里插入圖片描述
本題給出的數組 nums 包含 [1,n] 中的所有數,問選 3 個時可以得到的所有異或值,分情況討論:

  • n = 1,只能與自己異或,答案為 {1}
  • n = 2,必有兩個相同值異或(a^a=0),然后再與 1/2 異或,答案為 {1,2}
  • n > 2:
    • 1 ^ 2 ^ 3 = 0,所以可以取到 0
    • a ^ a ^ a = a,所以可以得到 [1,n]
    • 對于大于 n 的值,可以使用構造的方式來獲得,比如說 1101,可以通過 {1000,100,1} 獲得;1100 可以通過 {1000,101,1} 獲得;得到一般公式,對于 [n+1, 2 l 2^{l} 2l-1] 中任意一個數 a 來說,它可以通過 { 2 l ? 1 2^{l-1} 2l?1,a ^ 1 ^ 2 l ? 1 2^{l-1} 2l?1,1} 獲得。
    • 特殊情況,a = 2 l ? 1 2^{l-1} 2l?1 + 1(即1001100001 這種情況),無法使用上述公式得到,這里特殊處理,可以使用 { 2 l ? 1 2^{l-1} 2l?1,2,3} 得到

代碼如下:

class Solution {public int uniqueXorTriplets(int[] nums) {int n = nums.length;if(n == 1) return 1;if(n == 2) return 2;// [1, n] 選 3 個數for(int i = 31; i >= 0; i--){if((n >> i & 1) == 1){return 1 << (i + 1);}}return -1;}
}

三、3514. 不同 XOR 三元組的數目 II

題目鏈接
在這里插入圖片描述
本題數據范圍小,可以使用 O( n 2 n^{2} n2) 的時間復雜度解決,先處理出 nums數組 中兩個數的異或值,然后拿該異或值再與 nums 數組異或。代碼如下:

class Solution {public int uniqueXorTriplets(int[] nums) {int mx = 0;for(int x : nums){mx = Math.max(mx, x);}int u = 1 << (32 - Integer.numberOfLeadingZeros(mx));// 這里不要使用 set 來存儲,會超時boolean[] has = new boolean[u];for(int i = 0; i < nums.length; i++){for(int j = i; j < nums.length; j++){has[nums[i] ^ nums[j]] = true;}}boolean[] has1 = new boolean[u];for(int i = 0; i < u; i++){if(!has[i]) continue;for(int x : nums){has1[i ^ x] = true;}}int ans = 0;for(boolean x : has1){if(x) ans++;}return ans;}
}

四、3515. 帶權樹中的最短路徑

題目鏈接
在這里插入圖片描述
本題的難點在于怎么知道更新的(u,v)之間的邊權會影響根節點到哪些點的路徑距離,由于本題是一個樹,所以影響的肯定是(u,v)的所有子節點,那么問題變成了如何維護一個節點的所有子節點?這里可以使用 dfs時間戳 來維護:

  • dfs時間戳就是通過先序遍歷,對于每個節點 x,記錄進入 x 節點的時間in[x]以及出該節點的時間out[x],如果其他節點的[in[y], out[y]][in[x],out[x]] 中,說明 y 是 x 的子節點。

此時,對于 (u,v) 之間邊權的更新,就可以轉換成 [in[v], out[v]] 區間的更新(u 是 v 的父節點),可以使用差分的思想來做,由于數據最多只能支持 O(nlogn) 的時間復雜度,所以需要一個 logn 查詢/修改的數據結構來維護,可以選擇線段樹/樹狀數組,這里使用樹狀數組。

代碼如下:

class Solution {// 樹狀數組模板static class FenwickTree{int[] tree;public FenwickTree(int n){tree = new int[n + 1];}public void update(int i, int val){while(i < tree.length){tree[i] += val;i += i & -i;}}public int pre(int i){int res = 0;while(i > 0){res += tree[i];i -= i & -i;}return res;}}// 根據進出時間來記錄每次修改干涉的路徑// 根據{進出時間+差分}來修改/得到最短路徑public int[] treeQueries(int n, int[][] edges, int[][] queries) {List<Integer>[] g = new ArrayList[n+1];Arrays.setAll(g, e->new ArrayList<>());for(int[] e : edges){int u = e[0];int v = e[1];g[u].add(v);g[v].add(u);}in = new int[n+1];out = new int[n+1];dfs(1, -1, g);weight = new int[n+1];// 記錄邊權FenwickTree t = new FenwickTree(n);for(int[] e : edges){update(e[0], e[1], e[2], t);}List<Integer> ans = new ArrayList<>();for(int[] q : queries){if(q[0] == 1){update(q[1], q[2], q[3], t);}else{ans.add(t.pre(in[q[1]]));}}return ans.stream().mapToInt(i -> i).toArray();}int clock = 0;int[] in;int[] out;int[] weight;void dfs(int x, int fa, List<Integer>[] g){in[x] = ++clock;for(int y : g[x]){if(y == fa) continue;dfs(y, x, g);}out[x] = clock;}void update(int x, int y, int w, FenwickTree t){if(in[x] > in[y]){y = x;}int d = w - weight[y];weight[y] = w;t.update(in[y], d);t.update(out[y]+1, -d);}
}

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

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

相關文章

【后端】【python】利用反射器----動態設置裝飾器

&#x1f4d8; Python 裝飾器進階指南 一、裝飾器本質 ? 本質概念 Python 裝飾器的本質是 函數嵌套 返回函數&#xff0c;它是對已有函數的增強&#xff0c;不修改原函數代碼&#xff0c;使用語法糖 decorator 實現包裹效果。 def my_decorator(func):def wrapper(*args, …

Nodejs Express框架

參考&#xff1a;Node.js Express 框架 | 菜鳥教程 第一個 Express 框架實例 接下來我們使用 Express 框架來輸出 "Hello World"。 以下實例中我們引入了 express 模塊&#xff0c;并在客戶端發起請求后&#xff0c;響應 "Hello World" 字符串。 創建 e…

Docker Swarm 集群

Docker Swarm 集群 本文檔介紹了 Docker Swarm 集群的基本概念、工作原理以及相關命令使用示例&#xff0c;包括如何在服務調度中使用自定義標簽。本文檔適用于需要管理和擴展 Docker 容器化應用程序的生產環境場景。 1. 什么是 Docker Swarm Docker Swarm 是用于管理 Docker…

充電寶項目中的MQTT(輕量高效的物聯網通信協議)

文章目錄 補充&#xff1a;HTTP協議MQTT協議MQTT的核心特性MQTT vs HTTP&#xff1a;關鍵對比 EMQX項目集成EMQX集成配置客戶端和回調方法具體接口和方法處理處理類 補充&#xff1a;HTTP協議 HTTP是一種應用層協議&#xff0c;使用TCP作為傳輸層協議&#xff0c;默認端口是80…

【iOS】UIPageViewController學習

UIPageViewController學習 前言創建一個UIPageViewController最簡單的使用 UIPageViewController的方法說明&#xff1a;效果展示 UIPageViewController的協議方法 前言 筆者最近在寫項目時想實現一個翻書效果&#xff0c;上網學習到了UIPageViewController今天寫本篇博客總結…

Linux搭建環境:從零開始掌握基礎操作(四)

? ? 您好&#xff0c;我是程序員小羊&#xff01; 前言 軟件測試第一步就是搭建測試環境&#xff0c;如何搭建好測試環境&#xff0c;需要具備兩項的基礎知識&#xff1a; 1、Linux 命令: 軟件測試第一個任務, 一般都需要進行環境搭建, 一部分&#xff0c;環境搭建內容是在服…

一天一個java知識點----Tomcat與Servlet

認識BS架構 靜態資源&#xff1a;服務器上存儲的不會改變的數據&#xff0c;通常不會根據用戶的請求而變化。比如&#xff1a;HTML、CSS、JS、圖片、視頻等(負責頁面展示) 動態資源&#xff1a;服務器端根據用戶請求和其他數據動態生成的&#xff0c;內容可能會在每次請求時都…

YOLOV8 OBB 海思3516訓練流程

YOLOV8 OBB 海思3516訓練流程 目錄 1、 下載帶GPU版本的torch(可選) 1 2、 安裝 ultralytics 2 3、 下載pycharm 社區版 2 4、安裝pycharm 3 5、新建pycharm 工程 3 6、 添加conda 環境 4 7、 訓練代碼 5 9、配置Ymal 文件 6 10、修改網絡結構 9 11、運行train.py 開始訓練模…

【深度學習】花書第18章——配分函數

直面配分函數 許多概率模型&#xff08;通常是無向圖模型&#xff09;由一個未歸一化的概率分布 p ~ ( x , θ ) \tilde p(\mathbf x,\theta) p~?(x,θ)定義。我們必須通過除以配分函數 Z ( θ ) Z(\pmb{ \theta}) Z(θ)來歸一化 p ~ \tilde p p~?。以獲得一個有效的概率分…

工作記錄1

日常總結、靈感記錄、學習要點。持續記錄 學海無涯,再好的記性也比不過爛筆頭,記錄一下學習日常、靈感、要點。 前言:最近看見一個博文,很有感觸,是某個大佬自己運營的網站,分享了他的各種經驗文章和自身的一些筆記。本人還沒有他這么屌,所以還是先在CSDN上小試牛刀吧…

Spring Boot(二十一):RedisTemplate的String和Hash類型操作

RedisTemplate和StringRedisTemplate的系列文章詳見&#xff1a; Spring Boot&#xff08;十七&#xff09;&#xff1a;集成和使用Redis Spring Boot&#xff08;十八&#xff09;&#xff1a;RedisTemplate和StringRedisTemplate Spring Boot&#xff08;十九&#xff09;…

智能指針之設計模式1

本文探討一下智能指針和GOF設計模式的關系&#xff0c;如果按照設計模式的背后思想來分析&#xff0c;可以發現圍繞智能指針的設計和實現有設計模式的一些思想體現。當然&#xff0c;它們也不是嚴格意義上面向對象的設計模式&#xff0c;畢竟它們沒有那么分明的類層次體系&…

中間件--ClickHouse-1--基礎介紹(列式存儲,MPP架構,分布式計算,SQL支持,向量化執行,億萬級數據秒級查詢)

1、概述 ClickHouse是一個用于聯機分析(OLAP)的列式數據庫管理系統(DBMS)。它由俄羅斯的互聯網巨頭Yandex為解決其內部數據分析需求而開發&#xff0c;并于2016年開源。專為大規模數據分析&#xff0c;實時數據分析和復雜查詢設計&#xff0c;具有高性能、實時數據和可擴展性等…

Go之Slice和數組:深入理解底層設計與最佳實踐

在Go語言中&#xff0c;數組&#xff08;Array&#xff09;和切片&#xff08;Slice&#xff09;是兩種看似相似卻本質不同的數據結構。本文將深入剖析它們的底層實現機制&#xff0c;并結合實際代碼示例&#xff0c;幫助開發者掌握核心差異和使用場景。 一、基礎概念&#xff…

力扣熱題100——普通數組(不普通)

普通數組但一點不普通&#xff01; 最大子數組和合并區間輪轉數組除自身以外數組的乘積缺失的第一個正數 最大子數組和 這道題是非常經典的適用動態規劃解決題目&#xff0c;但同時這里給出兩種解法 動態規劃、分治法 那么動態規劃方法大家可以在我的另外一篇博客總結中看到&am…

矩陣基礎+矩陣轉置+矩陣乘法+行列式與逆矩陣

GPU渲染過程 矩陣 什么是矩陣&#xff08;Matrix&#xff09; 向量 &#xff08;3&#xff0c;9&#xff0c;88&#xff09; 點乘&#xff1a;計算向量夾角 叉乘&#xff1a;計算兩個向量構成平面的法向量。 矩陣 矩陣有3行&#xff0c;2列&#xff0c;所以表示為M32 獲取固…

MySQL之text字段詳細分類說明

在 MySQL 中&#xff0c;TEXT 是用來存儲大量文本數據的數據類型。TEXT 類型可以存儲非常長的字符串&#xff0c;比 VARCHAR 類型更適合存儲大塊的文本數據。TEXT 數據類型分為以下幾個子類型&#xff0c;每個子類型用于存儲不同大小范圍的文本數據&#xff1a; TINYTEXT: 可以…

超詳細!Android 面試題大匯總與深度解析

一、Java 與 Kotlin 基礎 1. Java 的多態是如何實現的&#xff1f; 多態是指在 Java 中&#xff0c;同一個行為具有多個不同表現形式或形態的能力。它主要通過方法重載&#xff08;Overloading&#xff09;和方法重寫&#xff08;Overriding&#xff09;來實現。 方法重載&a…

如何提高webrtc操作跟手時間,降低延遲

第一次做webrtc項目&#xff0c;操作延遲&#xff0c;一直是個問題&#xff0c;多次調試都不能達到理想效果。偶爾發現提高jitterBuffer時間可以解決此問題。關鍵代碼 const _setJitter (values: number) > { const receives peerConnection.getReceivers();receives.f…

語音合成(TTS)從零搭建一個完整的TTS系統-第一節-效果演示

一、概述 語音合成又叫文字轉語音&#xff08;TTS-text to speech &#xff09;&#xff0c;本專題我們記錄從零搭建一個完整的語音合成系統&#xff0c;包括文本前端、聲學模型和聲碼器&#xff0c;從模型訓練到系統的工程化實現&#xff0c;模型可以部署在手機等嵌入式設備上…