【每日刷题】Day40
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
1. 202. 快乐数 - 力扣(LeetCode)
2. 217. 存在重复元素 - 力扣(LeetCode)
3. 374. 猜数字大小 - 力扣(LeetCode)
1. 202. 快乐数 - 力扣(LeetCode)
//思路:快慢指针。这题首先需要知道,当该数不是快乐数字时,数字的变化会陷入循环,这里我们引用官方题解的图就很好理解
//因此,我们可以利用快慢指针来判断是否成环
int HappyNum(int n)
{
int sum = 0;
while(n)
{
sum+=(n%10)*(n%10);
n/=10;
}
return sum;
}
bool isHappy(int n)
{
int slow = n;
int fast = n;
do
{
slow = HappyNum(slow);//慢指针变化一次
fast = HappyNum(fast);//快指针变化两次
fast = HappyNum(fast);
}while(slow!=fast);//当两数相同时停下循环,判断快指针是否为1从而判断是否为快乐数
return fast==1;
}
2. 217. 存在重复元素 - 力扣(LeetCode)
//思路:排序遍历。将数组排序,排序后重复元素挨在一起,遍历数组。
int compare(const void* a,const void* b)
{
return (*(int*)a-*(int*)b);
}
bool containsDuplicate(int* nums, int numsSize)
{
qsort(nums,numsSize,sizeof(int),compare);
for(int i = 0;i<numsSize-1;i++)
{
if(nums[i]==nums[i+1])//相邻元素相同说明右重复元素
{
return true;
}
}
return false;
}
3. 374. 猜数字大小 - 力扣(LeetCode)
//思路:二分查找。
int guessNumber(int n)
{
int left = 1;
int right = n;
while(left<=right)
{
int mid = left+(right-left)/2;
if(guess(mid)==1)
{
left = mid+1;
}
else if(guess(mid)==-1)
{
right = mid-1;
}
else
{
return mid;
}
}
return 0;
}