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

Rust每日一練(Leetday0012) 首末位置、插入位置、有效數(shù)獨

這篇具有很好參考價值的文章主要介紹了Rust每日一練(Leetday0012) 首末位置、插入位置、有效數(shù)獨。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Rust每日一練(Leetday0012) 首末位置、插入位置、有效數(shù)獨

目錄

34. 查找元素的首末位置 Find-first-and-last-position-of-element-in-sorted-array??????

35. 搜索插入位置 Search Insert Position????

36. 有效的數(shù)獨 Valid Sudoku??????

?? 每日一練刷題專欄???

Rust每日一練 專欄

Golang每日一練 專欄

Python每日一練 專欄

C/C++每日一練 專欄

Java每日一練 專欄


34. 查找元素的首末位置 Find-first-and-last-position-of-element-in-sorted-array??????

原標題:在排序數(shù)組中查找元素的第一個和最后一個位置

給定一個按照升序排列的整數(shù)數(shù)組?nums,和一個目標值?target。找出給定目標值在數(shù)組中的開始位置和結束位置。

如果數(shù)組中不存在目標值?target,返回?[-1, -1]。

進階:

  • 你可以設計并實現(xiàn)時間復雜度為?O(log n)?的算法解決此問題嗎?

示例 1:

輸入:nums = [5,7,7,8,8,10], target = 8
輸出:[3,4]

示例?2:

輸入:nums = [5,7,7,8,8,10], target = 6
輸出:[-1,-1]

示例 3:

輸入:nums = [], target = 0
輸出:[-1,-1]

提示:

  • 0 <= nums.length <= 10^5
  • -10^9?<= nums[i]?<= 10^9
  • nums?是一個非遞減數(shù)組
  • -10^9?<= target?<= 10^9

代碼:二分法

對于查找左邊界,設置一個變量 left,初始值為 -1,表示目標值在數(shù)組中不存在。然后用二分法查找目標值,如果找到目標值,就更新 left 的值,并繼續(xù)在左半邊查找,直到找到最左邊的目標值。對于查找右邊界,設置另一個變量 right,初始值為 -1,然后用類似的方法查找目標值的右邊界。 最后,判斷 left 是否等于 -1,如果是,說明目標值在數(shù)組中不存在,直接返回 [-1, -1]。 否則,返回 [left, right]。

fn search_range(nums: &[i32], target: i32) -> [i32; 2] {
    let (mut left, mut right) = (-1, -1);
    if nums.len() ==0  {
        return [left, right]
    }
    // 查找左邊界
    let (mut l, mut r) = (0, nums.len() - 1);
    while l <= r {
        let mid = l + (r - l) / 2;
        if nums[mid] == target {
            left = mid as i32;
            r = mid - 1;
        } else if nums[mid] > target {
            r = mid - 1;
        } else {
            l = mid + 1;
        }
    }
    // 如果左邊界沒找到,直接返回
    if left == -1 {
        return [-1, -1];
    }
    // 查找右邊界
    let (mut l, mut r) = (0, nums.len() - 1);
    while l <= r {
        let mid = l + (r - l) / 2;
        if nums[mid] == target {
            right = mid as i32;
            l = mid + 1;
        } else if nums[mid] > target {
            r = mid - 1;
        } else {
            l = mid + 1;
        }
    }
    [left, right]
}

fn main() {
    let nums = vec![5, 7, 7, 8, 8, 10];
    println!("{:?}", search_range(&nums, 8));
    println!("{:?}", search_range(&nums, 6));
    let nums: Vec<i32> = Vec::new();
    println!("{:?}", search_range(&nums, 0));
}

輸出:

[3, 4]
[-1, -1]
[-1, -1]


35. 搜索插入位置 Search Insert Position????

給定一個排序數(shù)組和一個目標值,在數(shù)組中找到目標值,并返回其索引。如果目標值不存在于數(shù)組中,返回它將會被按順序插入的位置。

請必須使用時間復雜度為?O(log n)?的算法。

示例 1:

輸入: nums = [1,3,5,6], target = 5
輸出: 2

示例?2:

輸入: nums = [1,3,5,6], target = 2
輸出: 1

示例 3:

輸入: nums = [1,3,5,6], target = 7
輸出: 4

提示:

  • 1 <= nums.length <= 10^4
  • -10^4?<= nums[i] <= 10^4
  • nums?為?無重復元素?的?升序?排列數(shù)組
  • -10^4?<= target <= 10^4

代碼:

用二分法查找目標值,如果找到目標值,就返回其索引;如果目標值不在數(shù)組中,就返回它應該插入的位置。
具體實現(xiàn):用兩個指針 l 和 r,分別指向數(shù)組的左邊界和右邊界。然后用二分法查找目標值。每次查找時,取中間位置 mid,然后將目標值與 nums[mid] 進行比較。如果相等,就返回 mid;如果目標值小于 nums[mid],就將右邊界 r 更新為 mid-1;如果目標值大于 nums[mid],就將左邊界 l 更新為 mid+1。最后,如果目標值不在數(shù)組中,就返回左邊界 l。

fn search_insert(nums: &[i32], target: i32) -> usize {
    let (mut l, mut r) = (0, nums.len() - 1);
    while l <= r {
        let mid = l + (r - l) / 2;
        if nums[mid] == target {
            return mid;
        } else if nums[mid] > target {
            r = mid - 1;
        } else {
            l = mid + 1;
        }
    }
    l
}

fn main() {
    let nums = vec![1, 3, 5, 6];
    println!("{}", search_insert(&nums, 5));
    println!("{}", search_insert(&nums, 2));
    println!("{}", search_insert(&nums, 7));
}

輸出:

2
1
4


36. 有效的數(shù)獨 Valid Sudoku??????

請你判斷一個?9 x 9?的數(shù)獨是否有效。只需要?根據(jù)以下規(guī)則?,驗證已經(jīng)填入的數(shù)字是否有效即可。

  1. 數(shù)字?1-9?在每一行只能出現(xiàn)一次。
  2. 數(shù)字?1-9?在每一列只能出現(xiàn)一次。
  3. 數(shù)字?1-9?在每一個以粗實線分隔的?3x3?宮內(nèi)只能出現(xiàn)一次。(請參考示例圖)

注意:

  • 一個有效的數(shù)獨(部分已被填充)不一定是可解的。
  • 只需要根據(jù)以上規(guī)則,驗證已經(jīng)填入的數(shù)字是否有效即可。
  • 空白格用?'.'?表示。

示例 1:

Rust每日一練(Leetday0012) 首末位置、插入位置、有效數(shù)獨

輸入:board = 
[["5","3",".",".","7",".",".",".","."],
 ["6",".",".","1","9","5",".",".","."],
 [".","9","8",".",".",".",".","6","."],
 ["8",".",".",".","6",".",".",".","3"],
 ["4",".",".","8",".","3",".",".","1"],
 ["7",".",".",".","2",".",".",".","6"],
 [".","6",".",".",".",".","2","8","."],
 [".",".",".","4","1","9",".",".","5"],
 [".",".",".",".","8",".",".","7","9"]]
輸出:true

示例 2:

輸入:board = 
[["8","3",".",".","7",".",".",".","."],
 ["6",".",".","1","9","5",".",".","."],
 [".","9","8",".",".",".",".","6","."],
 ["8",".",".",".","6",".",".",".","3"],
 ["4",".",".","8",".","3",".",".","1"],
 ["7",".",".",".","2",".",".",".","6"],
 [".","6",".",".",".",".","2","8","."],
 [".",".",".","4","1","9",".",".","5"],
 [".",".",".",".","8",".",".","7","9"]]
輸出:false
解釋:除了第一行的第一個數(shù)字從 5 改為 8 以外,空格內(nèi)其他數(shù)字均與 示例1 相同。 但由于位于左上角的 3x3 宮內(nèi)有兩個 8 存在, 因此這個數(shù)獨是無效的。

提示:

  • board.length == 9
  • board[i].length == 9
  • board[i][j]?是一位數(shù)字(1-9)或者?'.'

代碼:

用三個數(shù)組來表示行、列、小九宮: rows、cols 和 boxs。
其中,rows[i][num] 表示第 i 行是否出現(xiàn)過數(shù)字 num,
cols[j][num] 表示第 j 列是否出現(xiàn)過數(shù)字 num,
boxs[k][num] 表示第 k 個子數(shù)獨是否出現(xiàn)過數(shù)字 num。
遍歷數(shù)獨每一個位置,如果該位置為數(shù)字,則判斷該數(shù)字在當前位置所在的行、列、小九宮中是否已經(jīng)出現(xiàn)過。如果已經(jīng)出現(xiàn)過,則該數(shù)獨無效;否則,將其記錄在對應的數(shù)組中。

use std::collections::HashSet;

fn is_valid_sudoku(board: &[Vec<char>]) -> bool {
    let mut rows = vec![HashSet::new(); 9];
    let mut cols = vec![HashSet::new(); 9];
    let mut boxes = vec![HashSet::new(); 9];
    for i in 0..9 {
        for j in 0..9 {
            if board[i][j] == '.' {
                continue;
            }
            let num = board[i][j];
            if rows[i].contains(&num)
                || cols[j].contains(&num)
                || boxes[(i / 3) * 3 + j / 3].contains(&num)
            {
                return false;
            }
            rows[i].insert(num);
            cols[j].insert(num);
            boxes[(i / 3) * 3 + j / 3].insert(num);
        }
    }
    true
}

fn main() {
    let board = vec![
        vec!['5', '3', '.', '.', '7', '.', '.', '.', '.'],
        vec!['6', '.', '.', '1', '9', '5', '.', '.', '.'],
        vec!['.', '9', '8', '.', '.', '.', '.', '6', '.'],
        vec!['8', '.', '.', '.', '6', '.', '.', '.', '3'],
        vec!['4', '.', '.', '8', '.', '3', '.', '.', '1'],
        vec!['7', '.', '.', '.', '2', '.', '.', '.', '6'],
        vec!['.', '6', '.', '.', '.', '.', '2', '8', '.'],
        vec!['.', '.', '.', '4', '1', '9', '.', '.', '5'],
        vec!['.', '.', '.', '.', '8', '.', '.', '7', '9'],
    ];
    println!("{}", is_valid_sudoku(&board));

    let board = vec![
        vec!['8', '3', '.', '.', '7', '.', '.', '.', '.'],
        vec!['6', '.', '.', '1', '9', '5', '.', '.', '.'],
        vec!['.', '9', '8', '.', '.', '.', '.', '6', '.'],
        vec!['8', '.', '.', '.', '6', '.', '.', '.', '3'],
        vec!['4', '.', '.', '8', '.', '3', '.', '.', '1'],
        vec!['7', '.', '.', '.', '2', '.', '.', '.', '6'],
        vec!['.', '6', '.', '.', '.', '.', '2', '8', '.'],
        vec!['.', '.', '.', '4', '1', '9', '.', '.', '5'],
        vec!['.', '.', '.', '.', '8', '.', '.', '7', '9'],
    ];
    println!("{}", is_valid_sudoku(&board));
}

輸出:

true
false


?? 每日一練刷題專欄???

? 持續(xù),努力奮斗做強刷題搬運工!

?? 點贊,你的認可是我堅持的動力!?

???收藏,你的青睞是我努力的方向!?

? 評論,你的意見是我進步的財富!??

??主頁:https://hannyang.blog.csdn.net/

Rust每日一練(Leetday0012) 首末位置、插入位置、有效數(shù)獨

Rust每日一練 專欄

(2023.5.16~)更新中...

Rust每日一練(Leetday0012) 首末位置、插入位置、有效數(shù)獨

Golang每日一練 專欄

(2023.3.11~)更新中...

Rust每日一練(Leetday0012) 首末位置、插入位置、有效數(shù)獨

Python每日一練 專欄

(2023.2.18~2023.5.18)暫停更

Rust每日一練(Leetday0012) 首末位置、插入位置、有效數(shù)獨

C/C++每日一練 專欄

(2023.2.18~2023.5.18)暫停更

Rust每日一練(Leetday0012) 首末位置、插入位置、有效數(shù)獨

Java每日一練 專欄

(2023.3.11~2023.5.18)暫停更文章來源地址http://www.zghlxwxcb.cn/news/detail-490546.html

到了這里,關于Rust每日一練(Leetday0012) 首末位置、插入位置、有效數(shù)獨的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • Rust每日一練(Leetday0025) 矩陣置零、搜索二維矩陣、顏色分類

    Rust每日一練(Leetday0025) 矩陣置零、搜索二維矩陣、顏色分類

    目錄 73. 矩陣置零 Set Matrix Zeroes?????? 74. 搜索二維矩陣 Search A 2d-Matrix?????? 75. 顏色分類 Sort Colors?????? ?? 每日一練刷題專欄??? Rust每日一練 專欄 Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 給定一個? m ?x? n ?的矩陣,如果一個元

    2024年02月11日
    瀏覽(55)
  • Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串

    Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串

    目錄 84. 柱狀圖中最大的矩形 Largest-rectangle-in-histogram???????? 85. 最大矩形 Maximal Rectangle???????? 87. 擾亂字符串 Scramble String???????? ?? 每日一練刷題專欄??? Rust每日一練 專欄 Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 給定? n

    2024年02月09日
    瀏覽(31)
  • Rust每日一練(Leetday0020) 最后單詞的長度、螺旋矩陣II、排列序列

    Rust每日一練(Leetday0020) 最后單詞的長度、螺旋矩陣II、排列序列

    目錄 58. 最后一個單詞的長度 Length of Last Word???? 59. 螺旋矩陣 II Spiral Matrix II?????? 60. 排列序列 Permutation Sequence???????? ?? 每日一練刷題專欄??? Rust每日一練 專欄 Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 給你一個字符串? s ,由

    2024年02月10日
    瀏覽(58)
  • Rust每日一練(Leetday0027) 單詞搜索、刪除重復項II、搜索旋轉(zhuǎn)排序數(shù)組II

    Rust每日一練(Leetday0027) 單詞搜索、刪除重復項II、搜索旋轉(zhuǎn)排序數(shù)組II

    目錄 79. 單詞搜索 Word Search?????? 80. 刪除有序數(shù)組中的重復項 II Remove-duplicates-from-sorted-array-II?????? 81. 搜索旋轉(zhuǎn)排序數(shù)組 II Search-in-rotated-sorted-array-II?????? ?? 每日一練刷題專欄??? Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 給定一

    2024年02月08日
    瀏覽(24)
  • Golang每日一練(leetDay0004)

    Golang每日一練(leetDay0004)

    目錄 10.?正則表達式匹配?Regular Expression Matching???????? 11. 盛最多水的容器 Container with most water?????? 12. 整數(shù)轉(zhuǎn)羅馬數(shù)字 Integer to Roman?????? ???每日一練刷題專欄??? Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 給你一個字符串?

    2023年04月08日
    瀏覽(30)
  • Golang每日一練(leetDay0022)

    Golang每日一練(leetDay0022)

    目錄 64. 最小路徑和 Minimum Path Sum?????? 65. 有效數(shù)字 Valid Number???????? 66. 加一 Plus One???? ?? 每日一練刷題專欄??? Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 給定一個包含非負整數(shù)的? m ?x? n ?網(wǎng)格? grid ?,請找出一條從左上角到

    2023年04月21日
    瀏覽(27)
  • Golang每日一練(leetDay0031)

    Golang每日一練(leetDay0031)

    目錄 91. 解碼方法? Decode Ways?????? 93. 復原 IP 地址 Restore IP Addresses?????? ?? 每日一練刷題專欄??? Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 注:92.題 移到206.題之后 92. 反轉(zhuǎn)鏈表 II Reverse Linked List II 一條包含字母? A-Z ?的消息通過以

    2023年04月19日
    瀏覽(65)
  • Golang每日一練(leetDay0052)

    Golang每日一練(leetDay0052)

    目錄 153. 尋找旋轉(zhuǎn)排序數(shù)組中的最小值 Find Minimum In Rotated Sorted Array?????? 154. 尋找旋轉(zhuǎn)排序數(shù)組中的最小值 II Find Minimum In Rotated Sorted Array II???????? ?? 每日一練刷題專欄??? Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 已知一個長度為

    2024年02月02日
    瀏覽(26)
  • Golang每日一練(leetDay0116) 路徑交叉、回文對

    Golang每日一練(leetDay0116) 路徑交叉、回文對

    目錄 335. 路徑交叉 Self-crossing???????? 336. 回文對 Palindrome Pairs???????? ?? 每日一練刷題專欄??? Rust每日一練 專欄 Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 給你一個整數(shù)數(shù)組? distance ? 。 從? X-Y ?平面上的點? (0,0) ?開始,先向北

    2024年02月12日
    瀏覽(22)
  • Golang每日一練(leetDay0049) 二叉樹專題(9)

    Golang每日一練(leetDay0049) 二叉樹專題(9)

    目錄 144. 二叉樹的前序遍歷 Binary-tree Preorder Traversal???? 145. 二叉樹的前序遍歷 Binary-tree Postorder Traversal???? 對比: 94. 二叉樹的中序遍歷 Binary-tree Inorder Traversal???? 146. LRU緩存 LRU Cache?????? ?? 每日一練刷題專欄??? Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一

    2024年02月04日
    瀏覽(30)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包