1、链表的中间节点问题
用快指针和慢指针的思想交替前进,快指针一次两格两格走,慢指针一次一格走,这样就可以实现快指针走完时,慢指针刚好到题设所需地方。
class Solution {
public:
ListNode* middleNode(ListNode* head) {
struct ListNode *low=head;
struct ListNode *fast=head;
while(fast !=NULL and (fast->next !=NULL))
{
low=low->next;
fast=fast->next->next;
}
return low;
}
};
2.将数字变成0的操作次数
①我的解法: 依题,就是要设计一个循环,当num不等于0的时候,一直进行判断num是奇数是偶数并进行相应运算的循环。也就是该题为嵌套循环。
class Solution {
public:
int numberOfSteps(int num) {
int step=0;//即题目所需求的步数
while(num!=0)
{
if(num%2==0)
{
num=num / 2;
step+=1;
}
else
{
num= num -1;
step+=1;
}
}
return step;
}
};
②答案解法:依所给案例。第一次循环,我们令num=14,ans=0.将num转换为二进制 num=14=1110; num&1=14 &1=1110 & 0001=0000; 以此num为偶数,ans=1,num=0111=7。第二次循环,num&1=7 & 1=0111 & 0001=0001, ans=0010=3,num=0011=3。第三次循环, num&1=3 & 1=0011 & 0001=0001,ans=0010+0001=5,num=0001=1。第四次循环, num&1=1&1= 0001 & 0001=0001, ans=7,num=0000=0。循环结束。ans=7-1=6.
需注意的是,&位运算时,只有二进制同为1时,结果才为1.
class Solution {
public:
int numberOfSteps(int num) {
int ans=0;
while(num>0)
{
ans += (num&1) + 1;//num与1进行&运算,相当于是在进行奇偶检验
num>>=1;//num进行右移一位
}
return max(ans-1, 0);
}
};
3.最富有客户的资产总量
我的解法是利用c语言,因为最开始用c++时也是以下相同的代码段(只是获取数组长度的函数不一样),但是在获取数组长度并且进行循环的时候总是会出现数组越界的情况,暂时还没解决,但是c就不会出现这个情况。
int maximumWealth(int** accounts, int accountsSize, int* accountsColSize){
int max=0;
for(int i=0;i
这个是我用c++出现错误,但是目前还没有解决方案。
class Solution {
public:
int maximumWealth(vector>& accounts) {
int max=0;
int m=sizeof(accounts);
for(int i=0;i
接下来应该也会持续更新LeetCode的题目,以及从里面学习到的一些新知识,欢迎大家私信或评论跟我沟通交流啦!



