leetcode 202. 快樂數 思考分析(哈希集合與雙指針解)

1、題目

編寫一個算法來判斷一個數 n 是不是快樂數。
「快樂數」定義為:對于一個正整數,每一次將該數替換為它每個位置上的數字的平方和,然后重復這個過程直到這個數變為 1,也可能是 無限循環 但始終變不到 1。如果 可以變為 1,那么這個數就是快樂數。
如果 n 是快樂數就返回 True ;不是,則返回 False 。
在這里插入圖片描述

2、思考分析

對一個數不斷進行get_sum操作,那么最終可能的結果有兩種可能:
1、得到1
2、計算的數陷入某種循環,然后會有重復的數出現
如果得到1,直接返回true;
如果檢測到重復數出現就返回false;
否則記錄出現的數,并在while循環中對n進行更新。

 int get_sum(int n)
{int sum=0;while(n!=0){sum+=(n%10)*(n%10);n = n/10;}return sum;}

3、哈希法解

class Solution {
public:int get_sum(int n){int sum=0;while(n!=0){sum+=(n%10)*(n%10);n = n/10;}return sum;}bool isHappy(int n) {int sum=0;//sum,sum出現的頻次unordered_set<int> set;while(1){sum=get_sum(n);if(sum ==1) return true;//如果某個數重復出現,那么我們認為此時陷入了循環,則這個數不是快樂數else if(set.find(sum)!=set.end()){return false;}set.insert(sum);n=sum;}}
};

4、雙指針解

在這里插入圖片描述
我們得到的結果序列是一個隱式的鏈表。
隱式意味著我們沒有實際的鏈表節點和指針,但數據仍然形成鏈表結構。
于是這個問題可以轉換為檢測一個鏈表是否有環。
這個問題可以使用快慢指針法來解決。我們不是只跟蹤鏈表中的一個值,而是跟蹤兩個值,稱為快跑者和慢跑者。在算法的每一步中,慢速在鏈表中前進 1 個節點,快跑者前進 2 個節點。
前進一次調用一次計算函數,前進兩次調用兩次計算函數。

class Solution {
public:int get_next(int n){int sum=0;while(n!=0){sum+=(n%10)*(n%10);n = n/10;}return sum;}bool isHappy(int n) {int sum=0;int slow_runner = n;int fast_runner = get_next(n);while( fast_runner != 1 && slow_runner != fast_runner){//更新slow_runner,slow_runner每次前進一步slow_runner = get_next(slow_runner);//更新fast_runner,fast_runner每次前進二步,所以調用兩次getnext函數fast_runner = get_next(get_next(fast_runner));}if(fast_runner == 1) return true;return false;}
};

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

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

相關文章

五、線性回歸和多項式回歸實現

官網API 一、線性回歸 針對的是損失函數loss faction Ⅰ、Lasso Regression 采用L1正則&#xff0c;會使得w值整體偏小&#xff1b;w會變小從而達到降維的目的 import numpy as np from sklearn.linear_model import Lasso from sklearn.linear_model import SGDRegresso…

JavaScript中的地圖與對象

JavaScript對象與地圖 (JavaScript Objects vs Maps) Objects are super popular in JavaScript so its not a term you are hearing for the first time even if youre a novice JS developer. Objects, in general, are a very common data structure that is used very ofte…

深發展銀行編碼器(解剖)

電池拆下來&#xff0c;再裝上&#xff0c;還能繼續用下&#xff0c;不會被重置 轉載于:https://www.cnblogs.com/ahuo/archive/2012/01/25/2329485.html

關于$.getJson

這是一個Ajax函數的縮寫&#xff0c;這相當于: 123456$.ajax({dataType: "json",url: url,data: data,success: success});數據會被附加到一個查詢字符串的URL中&#xff0c;發送到服務器。如果該值的data參數是一個普通的對象&#xff0c;它會轉換為一個字符串并使用…

leetcode 1. 兩數之和 思考分析

1、題目 給定一個整數數組 nums 和一個目標值 target&#xff0c;請你在該數組中找出和為目標值的那 兩個 整數&#xff0c;并返回他們的數組下標。 你可以假設每種輸入只會對應一個答案。但是&#xff0c;數組中同一個元素不能使用兩遍。 2、思考分析 雙for循環的時間復雜度…

六、邏輯回歸

一、何為邏輯回歸 邏輯回歸可以簡單理解為是基于多元線性回歸的一種縮放。 多元線性回歸y的取值范圍在(-∞&#xff0c;∞)&#xff0c;數據集中的x是準確的一個數值。 用這樣的一個數據集代入線性回歸算法當中會得到一個模型。 這個模型所具備的功能就是當有人給這個模型一個…

C# 調用Windows API實現兩個進程間的通信

使用Windows API實現兩個進程間&#xff08;含窗體&#xff09;的通信http://blog.csdn.net/huangxinfeng/article/details/5513608 從C#下使用WM_COPYDATA傳輸數據說到Marshal的應用http://www.cnblogs.com/jiangyh-is-me/archive/2006/06/05/417381.html 問題解決&#xff1a…

如何在Golang中返回錯誤?

In Golang, we return errors explicitly using the return statement. This contrasts with the exceptions used in languages like java, python. The approach in Golang to makes it easy to see which function returns an error? 在Golang中&#xff0c;我們使用return…

leetcode 383. 贖金信 思考分析

題目 給定一個贖金信 (ransom) 字符串和一個雜志(magazine)字符串&#xff0c;判斷第一個字符串 ransom 能不能由第二個字符串 magazines 里面的字符構成。如果可以構成&#xff0c;返回 true &#xff1b;否則返回 false。 (題目說明&#xff1a;為了不暴露贖金信字跡&#x…

Numpy(科學計算庫)---講解

本內容來自《跟著迪哥學Python數據分析與機器學習實戰》&#xff0c;該篇博客將其內容進行了整理&#xff0c;加上了自己的理解&#xff0c;所做小筆記。若有侵權&#xff0c;聯系立刪。 迪哥說以下的許多函數方法都不用死記硬背&#xff0c;多查API多看文檔&#xff0c;確實&a…

仿安居客好租網房產源碼

網站設計簡約&#xff0c;大方&#xff0c;清爽開發技術&#xff1a;ASP.NET3.5,SQL2005,VS2008功能簡介1、小區&#xff0c;二手房&#xff0c;租房小區發布&#xff0c;編輯&#xff0c;修改功能&#xff0c;圖片批量上傳2、支持積分&#xff0c;發布房源、發布論壇帖子可獲得…

Eclipse中classpath和deploy assembly的文件位置

classpath的配置信息存儲在工程根目錄下的.classpath文件 deploy assembly配置信息存儲在工程目錄下的.settings\org.eclipse.wst.common.component文件中轉載于:https://www.cnblogs.com/jubincn/p/3381087.html

LeetCode 454. 四數相加 II 思考分析

題目 給定四個包含整數的數組列表 A , B , C , D ,計算有多少個元組 (i, j, k, l) &#xff0c;使得 A[i] B[j] C[k] D[l] 0。 為了使問題簡單化&#xff0c;所有的 A, B, C, D 具有相同的長度 N&#xff0c;且 0 ≤ N ≤ 500 。所有整數的范圍在 -228 到 228 - 1 之間&am…

ruby 嵌套函數_Ruby嵌套直到循環帶有示例

ruby 嵌套函數嵌套直到循環 (Nested until loop) Alike for, while, and do...while, until loop can also be nested for meeting the specific purpose. In this type of nesting, two until loops work in the combination such that at first, the outer loop is triggered…

SQL Server 2008中SQL增強功能點Merge

sql server 2008提供了一個增強的Sql命令Merge,用法參看MSDN。能根據兩張表數據的不同&#xff0c;對兩張表進行數據執行插入&#xff0c;更新或刪除等操作&#xff0c;一般用在數據的抽取&#xff0c;例如&#xff0c;根據在另一個表中找到的差異在一個表中插入、更新或刪除行…

Numpy(科學計算庫)---小練習

1&#xff0c;打印當前Numpy版本 import numpy as np print (np.__version__) """ 1.22.3 """2&#xff0c;構造一個全零的矩陣&#xff0c;并打印其占用的內存大小 yy np.zeros((3,3)) yy """ array([[0., 0., 0.],[0., 0., …

【轉】Spark源碼分析之-scheduler模塊

原文地址&#xff1a;http://jerryshao.me/architecture/2013/04/21/Spark%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E4%B9%8B-scheduler%E6%A8%A1%E5%9D%97/ Background Spark在資源管理和調度方式上采用了類似于Hadoop YARN的方式&#xff0c;最上層是資源調度器&#xff0c;它負…

【C++grammar】析構、友元、拷貝構造函數、深淺拷貝

目錄1、Destructor&#xff08;析構函數&#xff09;在堆和棧(函數作用域與內嵌作用域)上分別創建Employee對象&#xff0c;觀察析構函數的行為2、Friend&#xff08;友元&#xff09;1、為何需要友元2、友元函數和友元類3、關于友元的一些問題3、Copy Constructor&#xff08;…

用mstsc /console 強行“踢”掉其它在線的用戶

由于公司有很多windows服務器&#xff0c;而且有很大一部分不在國內&#xff0c;所以經常需要使用遠程桌面進行連接&#xff0c;這其中&#xff0c;就會經常遇到因為超出了最大連接數&#xff0c;而不能連接的事情&#xff0c;其中最頭痛的就是&#xff0c;在連接國外的服務器時…

set vector_Java Vector set()方法與示例

set vector向量類set()方法 (Vector Class set() method) set() method is available in java.util package. set()方法在java.util包中可用。 set() method is used to replace the old element with the given element (ele) when it exists otherwise it sets the given ele…