【算法訓練】Leetcode 1295. 統計位數為偶數的數字(2020.06.09 )

1 題目

1295. 統計位數為偶數的數字

給你一個整數數組 nums,請你返回其中位數偶數 的數字的個數


示例 1:

輸入:nums = [12,345,2,6,7896]
輸出:2
解釋:
12 是 2 位數字(位數為偶數)
345 是 3 位數字(位數為奇數)
2 是 1 位數字(位數為奇數)
6 是 1 位數字 位數為奇數)
7896 是 4 位數字(位數為偶數)
因此只有 12 和 7896 是位數為偶數的數字


示例 2:

輸入:nums = [555,901,482,1771]
輸出:1
解釋:
只有 1771 是位數為偶數的數字。


提示:

1 <= nums.length <= 500
1 <= nums[i] <= 10^5


來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/find-numbers-with-even-number-of-digits
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。


2 分析

  1. 求整數位數(可求!有方法!
  2. 位數是不是偶數
求整數位數的方法
  1. 直接使用整數求長度
  2. 轉換為字符串求長度

提示:
1 <= nums.length <= 500
1 <= nums[i] <= 10^5

這是關鍵信息

  • 數組個數最多500
  • 每個元素最多10000

備注:此處,官網的輸入測試用例居然有100000,這應該是bug,不用理會。

關注限定條件!

  • 數少的,甚至可以手算
  • 數較多的,需要一般算法
  • 數量極大的,需要高級算法

3 代碼

3.1 按照int求長度

極其簡單!
假定傳入int n

C++代碼:

while(n != 0){count++;n /= 10;
}
適用范圍:所有整數(正數,0,負數)

在這里插入圖片描述

3.2 轉換為字符串求長度

先將int轉換為字符串,然后直接求出長度,看看是不是偶數,一個表達式到位,這里只求長度。

Java代碼:

int n = -100;
System.out.println(String.valueOf(n).length());
適用范圍:自然數(正數數,0)

負數不行!因為有“-”,Because it has a minus sign.

3.3 題解

3.3.1 直接求(若可以輸入0,就會有問題)

框架思維

public int findNumbers(int[] nums) {int result = 0;  // 我要得到的結果存在這里return result;  // 返回這個結果}

Java

public int findNumbers(int[] nums) {int result = 0;int digitCount = 0;for(int i:nums){digitCount = 0;while(i != 0){digitCount++;i /= 10;}if(digitCount % 2 == 0)result++;}return result;}

面向對象:Every element in the array ‘nums’.
核心結構:求int的位數

思路框架

  • 遍歷每一個元素
    • 求整數位數
    • 看看是不是偶數

不管數據有多大,只要是整數,都可以(除了0)!但是數據太大的話,就太慢了

  • 時間復雜度 O(n2)
  • 空間復雜度O(1)

額外注意:0會報錯,0是1位數,當前算法會判斷0是0位數,就死了,特殊情況單獨處理即可

3.3.2 轉字符串

Java

public int findNumbers(int[] nums) {int count = 0;int result = 0;for(int i:nums){if(String.valueOf(i).length() % 2 == 0)result++;}return result;}

對于大規模數據,好用!

需要注意負數的處理,取其絕對值再做。

  • 時間復雜度 O(n)
  • 空間復雜度O(1)

3.4 特殊法題解:根據限定條件求

public int findNumbers(int[] nums) {int result = 0;for(int i:nums){if((i >= 10 && i <= 99) || (i >= 1000 && i <= 9999))result++;}return result;}

此處在力扣會報錯,100000不對,但是,這與題目不符,應該是測試用例庫錯誤!不用理會不重要。

當給定一些特殊的限定范圍,可以使用特殊法,但是不具備參考價值,沒有通用性

3.5 方法比較分析 與 數據限定范圍重要性

根據每個方法的分析,可以知道數據范圍的重要性,范圍不同,算法就不同。

本題面向數組內的元組,因此遍歷肯定是要的,for或者for each。

別的沒啥好說的。

4 收獲

4.1 一定要關注限定范圍,你處于真實世界!

4.2 盡可能一次提交正確,不要使用提交試錯,比賽也不允許

4.2 面向對象的算法設計 & 清零思維

很難的題目都是由小題目構成

我們需要抽絲剝繭,找到我們所面對的那個對象的算法,只關注它,然后再擴大一層,看看需不需要清零操作,類似往外推。

自外而內,自內而外。

4.3 框架思維

框架一:方法結果及其返回

想象我要得到這個結果,我把它存在這里,然后返回,之后,我再看看我該怎么做。

public int findNumbers(int[] nums) {int result = 0;  // 我要得到的結果存在這里return result;  // 返回這個結果}

**要靈活使用!**例如特殊情況,直接返回就可以,不要再賦值了……
框架二:遍歷數組元素

for(int i:nums){}
for(int i = 0;i < nums.length();i++){}

框架三:求正數位數
框架四:特殊情況單獨列出

4.4 追求邏輯上的簡潔,而不是代碼上的簡潔

5 第二掌 2020.06.11

重新做一遍,新的感悟

  1. 偶數的定義:整數 % 2 == 0;
  2. 求整數為數的循環法,0要單獨算
  3. 求字符串長度,使用了兩個類方法

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

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

相關文章

Vivado設置指定源文件進行RTL優化

像VS編譯器設置啟動項一樣&#xff0c;Vivado中&#xff0c;也有類似設計&#xff0c;可以看到&#xff0c;當前選中的是ALU&#xff0c;那么進行RTL優化的時候&#xff0c;會優化RTL的結果&#xff0c;而不是別的&#xff0c;如何改成別的&#xff1f; 在某文件上右鍵單擊選擇…

【完整流程】用VSCode替換Vivado默認編輯器

本文樓主找了很多資料&#xff0c;選出了最有用的資料&#xff0c;按照教程走&#xff0c;就可以順利搞定&#xff0c;先給出畫面 很酷很方便&#xff0c;同時還有 自動補全檢測錯誤列選自動生成仿真測試文件 等重要功能 Vivado原來的編輯器是這樣的…… 關鍵是&#xff0c…

IEDA中JavaDoc的自動生成、手動生成,以及生成html文檔

1 自動生成類的注釋 JavaDoc就是java特有的一種注釋。 1.1 配置 首先&#xff0c;IDEA點擊File-->Settings 然后Editor-->File and Code Templates-->Class 之后在這地方&#xff0c;添加一些代碼 /** * ${description} * * <p> * 創建日期&#xff1a;$…

【java】父類與子類的引用賦值關系

理清楚4個目標 父類引用&#xff08;“名”&#xff09;父類對象&#xff08;“實”&#xff09;子類引用子類對象 理清楚幾個操作 // 父類 public class parent{}// 子類 public class sun{}父類引用指向父類對象 parent p1 new parent();子類引用指向子類對象 son s1 …

IDEA自動生成 構造方法 get set方法

對于一個類&#xff0c;創建好成員變量后 右鍵單擊&#xff0c;選中Generate 然后 這幾個依次是 構造方法getsetget和set 我們可以選中一個&#xff0c;然后選中要生成的變量&#xff0c;點擊OK 這樣就可以自動生成 構成方法get方法set方法

IDEA快速修改類名和文件名

在你要修改的類名上&#xff0c;選中類名&#xff0c;然后 右鍵單擊選中Refactor選中Rename 也可以使用快捷鍵 Win用戶是Shift F6

java中 靜態方法與成員方法何時使用

靜態方法 不操作成員變量&#xff0c;可以直接調用 是用來直接對傳入的數據進行操作的 成員方法 需要操作對象的成員變量的 區別 靜態方法&#xff0c;不能操作成員變量&#xff0c;只是一個操作成員方法&#xff0c;可以操作成員變量&#xff0c;不僅僅是操作&#xff0…

通過編程解決問題的正確思路

1. 先知道我們面對一個怎樣的問題 2. 考慮這個問題在現實生活中&#xff0c;我們要用怎樣的方式去解決 3. 從現實到計算機&#xff0c;如何用編程的思路解決 4. 實現&#xff0c;編碼和測試 5. 迭代 現實問題自然語言解決方案機器語言解決方案編碼實現測試迭代

數據庫設計的核心原則 外鍵的設計 提高插入數據速度

大道至簡&#xff1a;數據庫設計的核心原則 數據庫設計&#xff0c;不得不承認&#xff0c;有很多專業化的理論知識&#xff0c;但是對于初學者來說&#xff0c;只需要大道至簡的原則就可以了。 能不重復的就不重復&#xff0c;太重復的就拆開&#xff0c;使用指定數據做識別…

MySQL提高插入數據的效率(結合JDBC)

0 解決問題最佳途徑&#xff1a;直接找官方 先說明的是&#xff0c;有問題直接去找官方文檔&#xff0c;而不應該去百度搜索&#xff0c;您很容易體驗到&#xff0c;搜索引擎很難快速找到真正對您有價值的解決方案&#xff0c;而官方文檔是最快捷的途徑。 本篇也是基于官方文…

【計算機心理學】先設計再實現 在實現中完善設計

先設計再實現 在物理學中&#xff0c;通常都是先理論證明觀點&#xff0c;再進行實踐&#xff0c;然后&#xff0c;再有世界各地的科學家根據理論進行實驗&#xff0c;以證明觀點正確。 在計算機軟件開發&#xff0c;硬件開發等&#xff0c;都講求先邏輯抽象設計&#xff0c;…

【FPGA VerilogHDL】第一次嘗試:LED燈基礎實驗

0 實驗環境 0.1 軟件環境 ISE 14.7win10vivado 2017.4 0.2 硬件設備 ISE適用的FPGA開發板&#xff1a;ALINK AX309 1 需求 能夠靈活控制4個LED燈 2 Verilog實現 timescale 1ns / 1ps // // Create Date: 14:18:20 08/08/2020 // Module Name: led // Revision…

使用ISE一鍵生成bit文件

我們知道&#xff0c;這幾個&#xff0c;在第一次做好源文件之后&#xff0c;需要一個個進行右鍵單擊-->run&#xff0c;以發現錯誤。 但是之后的調試&#xff0c;只要一點點變化&#xff0c;哪怕是注釋變化&#xff0c;都需要重新run3次&#xff0c;太麻煩了。 不過經過實…

【FPGA Verilog】實驗二:key按鍵基礎實驗

只說一下經驗和教訓 1 必須按照設計流程走 不要因為實驗簡單&#xff0c;就直接進行綜合&#xff0c;比如按照 設計編碼RTL優化仿真綜合管腳分配&#xff0c;實現下載 一定要按照這個步驟來。 2 必須先查看開發板說明文檔 開始出了一個令人困惑的問題&#xff0c;后來發現…

【Java】字符串轉換為數字:Integer的parseInt方法

Java官方文檔[1]的解釋 public static int parseInt?(String s) throws NumberFormatException Parses the string argument as a signed decimal integer. The characters in the string must all be decimal digits, except that the first character may be an ASCII minus…

在win10上使用Vmware安裝Mac OS

安裝macOS 如何在Windows上VMware上安裝macOS Catalina 10.15 做一些提示&#xff1a; 如果您在第一次啟動mac的時候&#xff0c;在出現【語言選擇】之前&#xff0c;出現了連接藍牙內容。 您可以將教程中【修改為win10 x64】那一步跳過&#xff0c;請注意&#xff0c;如果您…

JDBC 防御性編程

防御性編程&#xff08;Defensive Programming&#xff09; 什么是Defensive Programming[1]&#xff1f; 原文&#xff1a;Defensive programming is a form of defensive design intended to ensure the continuing function of a piece of software under unforeseen circu…

【Java】異常處理的目的

編程思維&#xff1a;Defensive Programming 我們寫好程序&#xff0c;將其打包&#xff0c;然后用戶就可以使用和運行&#xff0c;但是&#xff0c;外界的情況是未知的&#xff0c;我們的程序很可能因為某個因素的出現而崩潰&#xff0c;因此&#xff0c;對于我們可以預測到的…

【Coursera】Getting Started with Python:Week One - Reading: Welcome to The Class

原文 & 翻譯 Reading: Welcome to The Class Welcome to Getting Started with Python, the first class in our Python for Everybody Specialization. We have built this class specifically for those with no prior programming experience. With a relatively simpl…

【Java】獲取目錄及其子目錄文件的相關事宜

獲取目錄及其子目錄文件的代碼 public class Main {public static void main(String[] args) {String path "D:/"; File f new File(path);Main.getFile(f);}public static void getFile(File file){if(file ! null){File[] f file.listFiles();if(f ! null){for…