Leetcode 第 398 場周賽題解

Leetcode 第 398 場周賽題解

  • Leetcode 第 398 場周賽題解
    • 題目1:3151. 特殊數組 I
      • 思路
      • 代碼
      • 復雜度分析
    • 題目2:3152. 特殊數組 II
      • 思路
      • 代碼
      • 復雜度分析
    • 題目3:3153. 所有數對中數位不同之和
      • 思路
      • 代碼
      • 復雜度分析
    • 題目4:3154. 到達第 K 級臺階的方案數
      • 思路
      • 代碼
      • 復雜度分析

Leetcode 第 398 場周賽題解

題目1:3151. 特殊數組 I

思路

遍歷數組 nums,依次比較相鄰元素是否奇偶性不同即可。

代碼

class Solution {
public:bool isArraySpecial(vector<int>& nums) {if (nums.size() == 1)return true;int n = nums.size();for (int i = 0; i < n - 1; i++)if (!different(nums[i], nums[i + 1]))return false;return true;}bool different(int a, int b) { return abs(a - b) % 2; }
};

復雜度分析

時間復雜度:O(n),其中 n 是數組 nums 的長度。

空間復雜度:O(1)。

題目2:3152. 特殊數組 II

思路

預處理 + 前綴和。

定義一個長為 n?1 的數組 a,其中 a[i] = nums[i] % 2 == nums[i+1] % 2,那么 a 的從 to-1 到 from 的子數組和等于 0,就說明詢問的子數組是特殊數組。

計算 a 的前綴和 preSum,可以快速判斷子數組和是否為 0。

代碼

/** @lc app=leetcode.cn id=3152 lang=cpp** [3152] 特殊數組 II*/// @lc code=start
class Solution
{
public:vector<bool> isArraySpecial(vector<int> &nums, vector<vector<int>> &queries){int n = nums.size();// 定義一個長為 n?1 的數組 a,其中 a[i] = nums[i] % 2 == nums[i+1] % 2// 那么 a 的從 to-1 到 from 的子數組和等于 0,就說明詢問的子數組是特殊數組。// 計算 a 的前綴和 preSum,可以快速判斷子數組和是否為 0vector<int> preSum(n, 0);for (int i = 1; i < n; i++){// 相鄰兩數的異或和的最低位取反int a = !((nums[i] ^ nums[i - 1]) & 1);preSum[i] = preSum[i - 1] + a;}int m = queries.size();vector<bool> ans(m);for (int i = 0; i < m; i++){int from = queries[i][0], to = queries[i][1];ans[i] = preSum[to] - preSum[from] == 0;}return ans;}
};
// @lc code=end

復雜度分析

時間復雜度:O(n+m),其中 n 是數組 nums 的長度,m 是數組 queries 的長度。

空間復雜度:O(n),其中 n 是數組 nums 的長度。

題目3:3153. 所有數對中數位不同之和

思路

遍歷數組 nums, 對每一位的數字進行計數并保存在數組 cnt 中。

遍歷完數組得到 cnt 后,cnt[i][j] 表示在第 i 位,數字為 j 的數的個數,那么在第 i 位,數字不為 j 的數的個數為 n?cnt[i][j],其中 n 為數組 nums 的長度。根據乘法原理可以知道,在第 i 位,一共有 cnt[i][j]?(n?cnt[i][j])/2 對數在該位的數字不相同。累加每一位數字不相同的數對數量,即可得到所需要的答案。

代碼

/** @lc app=leetcode.cn id=3153 lang=cpp** [3153] 所有數對中數位不同之和*/// @lc code=start
class Solution
{
public:long long sumDigitDifferences(vector<int> &nums){int n = nums.size();int cnt[9][10];memset(cnt, 0, sizeof(cnt));for (int num : nums){int i = 0;while (num){cnt[i][num % 10]++;i++;num /= 10;}}long long ans = 0LL;for (int i = 0; i < 9; i++)for (int j = 0; j < 10; j++)ans += cnt[i][j] * (n - cnt[i][j]);return ans >> 1;}
};
// @lc code=end

復雜度分析

時間復雜度:O(l*n+l*d),其中 n 為數組 nums 的長度,l 為數組 nums 中數據的十進制位數,l 的最大值為 9,d 為從 0 到 9 共 10 個數字。

空間復雜度:O(l*d),其中 l 為數組 nums 中數據的十進制位數,l 的最大值為 9,d 為從 0 到 9 共 10 個數字。

題目4:3154. 到達第 K 級臺階的方案數

思路

記憶化搜索。

定義 dfs(int i, int jump, bool preDown) 表示當前位于臺階 i,已經使用了 jump 次第二種操作,preDown:上一次操作是否為操作一時,到達臺階 k 的方案數。

枚舉當前使用哪個操作:

  1. 使用操作一:前提是 i != 0 && preDown == false。使用操作一后,要解決的子問題是 dfs(i - 1, jump, true),加入返回值中。
  2. 使用操作二:要解決的子問題是 dfs(i + (1 << jump), jump + 1, false),加入返回值中。
  3. 此外,如果 i=k,可以把返回值加一。

遞歸邊界:如果 i>k+1,由于操作一不能連續使用,無法到達 k,返回 0。

遞歸入口:dfs(1,0,false),即答案。

代碼

/** @lc app=leetcode.cn id=3154 lang=cpp** [3154] 到達第 K 級臺階的方案數*/// @lc code=start
class Solution
{
private:unordered_map<long long, int> memo;public:int waysToReachStair(int k){// 當前位于臺階 i,已經使用了 jump 次第二種操作,preDown:上一次操作是否為操作一function<int(int, int, bool)> dfs = [&](int i, int jump, bool preDown) -> int{if (i > k + 1)return 0;long long state = (long long)i << 32 | jump << 1 | preDown;if (memo.contains(state))return memo[state];int res = 0;if (i == k)res++;if (i != 0 && preDown == false){ // 操作一res += dfs(i - 1, jump, true);}res += dfs(i + (1 << jump), jump + 1, false); // 操作二memo[state] = res; // 記憶化return res;};// 從臺階 1 開始,一開始 jump 為 0,前一次操作不為操作二return dfs(1, 0, false);}
};
// @lc code=end

復雜度分析

時間復雜度:O(log2k)。

空間復雜度:O(log2k)。

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

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

相關文章

辯證 邏輯學 | 洞察 事物矛盾及變化規律 在形式邏輯基礎上 學會辯證思維(40節課)

課程下載&#xff1a;辯證邏輯學洞察事物矛盾及變化規律在形式邏輯基礎上學會辯證思維&#xff08;40節課&#xff09;-課程網盤鏈接提取碼下載.txt資源-CSDN文庫 更多資源下載&#xff1a;關注我。 在形式邏輯的基礎上&#xff0c;學會 辯證思維 敏銳 洞察事物發展變化的規…

Linux命令篇(一):文件管理部分

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;歡迎各位來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里不僅可以有所收獲&#xff0c;同時也能感受到一份輕松歡樂的氛圍&#xff0c;祝你生活愉快&#xff01; 文章目錄 1、cat命令常用參…

童趣盎然,米香四溢 —— 蒙自源六一兒童節特別獻禮

充滿歡聲笑語的六一兒童節馬上就要來了&#xff0c;在這個充滿童真和喜悅的時刻&#xff0c;蒙自源米線品牌以一顆童心&#xff0c;為所有大朋友和小朋友準備了一份特別的禮物。 從5月25日開始&#xff0c;蒙自源誠摯邀請您和孩子們一同前往蒙自源旗下各大門店&#xff0c;品嘗…

【MySQL數據庫】MySQL 高可用搭建方案——MHA實戰

MHA&#xff08;Master High Availability&#xff09; MHA實戰 MHA&#xff08;Master High Availability&#xff09; 一、MHA簡介二、MHA搭建準備要求&#xff1a;mha集群搭建&#xff0c;4臺服務器&#xff0c;1主2從&#xff0c;1臺mha2.1實驗思路2.2實驗準備 三、搭建MyS…

每日一題31:數據統計之即時配送食物

一、每日一題 配送表: Delivery -------------------------------------- | Column Name | Type | -------------------------------------- | delivery_id | int | | customer_id | int | | order_date …

HTML5常用標簽表格

04-08、表格標簽table 概述 表格&#xff1a;是一種行和列組合而成的單元格。一般應用于后臺網頁設計管理數據使用。 表格的架構部分&#xff1a; tabletable head 表格頭 theadtable body - 表格體 tbodytable foot -表格的頁腳 tfoot 表格的基本組成部分&#xff1a; t…

Bluetooth Profiles,藍牙配置文件對應設備

下面的常量是藍牙各種配置文件的標識符。 每個常量代表一個特定的藍牙配置文件&#xff0c;這些配置文件定義了藍牙設備之間通信的特定方式。以下是每個常量的解釋&#xff1a; HEADSET (1): 代表耳機和免提配置文件&#xff0c;通常用于藍牙耳機或車載免提系統。A2DP (2): 代…

opencv-python(三)

馬賽克 face img[162:428,297:527] # 人臉坐標區域face face[::10,::10] # 每10個中取出一個像素&#xff0c;馬賽克face np.repeat(face, 10, axis0) # 行方向重復10次face np.repeat(face, 10, axis1) # 列方向重復10次img[162:428,297:527] face[:266,:230] # 填充&a…

計算機科學與技術和軟件工程專業有什么區別?應該怎么選?

計算機科學與技術和軟件工程都是就業前景較好的計算機類專業&#xff0c;二者密切相關但側重點不同&#xff0c;同學們應該如何選擇呢&#xff1f; 一、學習內容 1.學科定位 ● 計算機科學與技術 側重于計算機科學的理論研究和基礎技術&#xff0c;包括算法、數據結構、人工…

lnmp平臺部署web應用,安裝Discuz社區平臺詳細文章——更新中

Nginx網站service 詳細相關介紹-特點-http狀態碼-配置文件、將nginx添加永久環境變量 訪問網站404是什么&#xff1f;_nginx 穩定版-CSDN博客文章瀏覽閱讀1.2k次&#xff0c;點贊33次&#xff0c;收藏24次。開源Web服務器軟件。_nginx 穩定版https://blog.csdn.net/2301_771619…

數據結構--數組(詳細分析)

目錄 &#x1f349;引言 &#x1f349;數組 &#x1f348;數組的特性 &#x1f348;數組的優缺點 &#x1f34d;優點&#xff1a; &#x1f34d;缺點&#xff1a; &#x1f348;數組的聲明與初始化 &#x1f348;數組的常見操作 &#x1f34d; 插入操作 &#x1f34d;…

Touch Camera PRO 2024 Easy Mobile Desktop Camera Controller(觸控相機專業版)

一個真正易于使用的移動+臺式攝像機控制器,具有視角切換功能! Touch Camera PRO 是一款非常易于使用的移動+桌面相機控制器,具有透視切換功能!它在 Home Designer、Runtime Level Editor 和 Floor Map Designer 等其他插件中使用! 在桌面和移動設備上工作! 一個干…

WIireShark使用教程

文章目錄 目錄 文章目錄 一.入門抓包示例 一.入門抓包示例 先介紹一下如何使用wireshark抓取相應網卡的流量&#xff0c;讓讀者可以先上手操作感受一下抓包的具體過程。 1.打開wireshark的主界面如下 2.選擇需要抓包的網卡&#xff0c;鼠標左鍵雙擊&#xff0c;即可抓取該網…

Mysql常見問題總結

1、MySQL初始化報錯 mysqld --initialize --usermysql --console 2024-06-02T15:52:22.645557Z 0 [System] [MY-013169] [Server] D:\installSoft\mysql-8.0.21-winx64\bin\mysqld.exe (mysqld 8.0.21) initializing of server in progress as process 8980 2024-06-02T15:52:2…

02-2.3.2_1 單鏈表的插入和刪除

喜歡《數據結構》部分筆記的小伙伴可以訂閱專欄&#xff0c;今后還會不斷更新。 此外&#xff0c;《程序員必備技能》專欄和《程序員必備工具》專欄&#xff08;該專欄暫未開設&#xff09;日后會逐步更新&#xff0c; 插入 按位序插入 &#xff08;1&#xff09;帶頭結點 L…

量子加速超級計算簡介

本文轉載自&#xff1a;量子加速超級計算簡介(2024年 3月 13日) By Mark Wolf https://developer.nvidia.cn/zh-cn/blog/an-introduction-to-quantum-accelerated-supercomputing/ 文章目錄 一、概述二、量子計算機的構建塊&#xff1a;QPU 和量子位三、量子計算硬件和算法四、…

代碼隨想錄算法訓練營第三十七 | ● 738.單調遞增的數字 ● 968.監控二叉樹

738.單調遞增的數字 講解鏈接&#xff1a;https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html class Solution { public:int monotoneIncreasingDigits(int n) {//整數轉字符串&#xff0c;變為字符串訪問比諸位取出數字要…

項目集成過程中的makefile記錄

項目集成過程中的makefile記錄 文章目錄 項目集成過程中的makefile記錄1.基礎概念注釋打印賦值方式常用變量$ 偽目標函數wildcard 多目錄、文件操作 2.思路梳理**需求分析**目錄結構 3.可行示例 持續更新中1.基礎概念 注釋 # 示例&#xff1a; # 項目名稱打印 echo "H…

控制臺相關

輸入輸出 輸出 Console.WriteLine("123123");//光標空行 Console.Write("123123123123");//不空行輸入 string str Console.ReadLine(); //如果在ReadKey(true)不會把輸入的內容顯示在控制臺上 char c Console.ReadKey(true).KeyChar; Console.WriteL…

ACM實訓第25天

第四套 第一道&#xff08;修改&#xff09; #include<stdio.h> #include<string.h> int cnt[10]; void count_digits(int n,int* cnt){for(int i1;i<n;i){int numi;while(num){cnt[num%10];num/10;}} } int main(){int t;scanf("%d\n",&t);whi…