=算法=双指针的种种应用(更新中)
注:本文写于C语言学习早期,双指针的用法较为基础且不全面。本文章将涉及C语言数组至数据结构的链表 Q:为什么要用双指针?A:因为通过使用双指针可以使算法的时间复杂度降低(或者降低遍历次数),有时也能降低空间复杂度 分类根据双指针的用法,可分为前后双指针,头尾双指针,快慢双指针….. 以下为各种双指针的应用及介绍前后双指针应用一 删除排序数组中的重复项要求:原地删除,并返回新数组的长度,不需要考虑数组中超出新长度后面的元素。 思路:通过创建一前一后两个指针,前指针指向上一个元素,后指针向后历遍,一旦找到不同的元素,前指针指向下一个位置,并视为空位,通过后指针找到目标元素,并存入前指针目前所指向的空位。然后后指针接着遍历,直至遍历整个数组. 12345678910111213141516171819202122//代码实现int removeDuplicates(int* nums, int numsSize){ int* left = nums; int*right = nums+1; int ret = 1; //遍历数组 for (int i ...
=算法=按位异或^的种种玩法
什么是按位异或^首先将不同数制的数写成二进制,例如9->0b1001.然后最末位对齐,依次按位异或.规则:0 ^ 0= 0 ; 1 ^ 1 = 0; 1 ^ 0 = 1推论:任意整数x,都有0^x = x ; x ^ x = 0\ 来看看应用 寻找一个单身狗数像[1,3,2,2,3]这样除了某一个数1,剩下的数字都是成对的,也就是说遍历一次数组,把所有的元素按位异或在一起,结果便是落单的那个1 12345678910//代码实现int arr[] = {1,3,2,2,3};int sz = sizeof(arr)/sizeof(arr[0]);//求数组大小int ret = 0;for (int i =0;i<sz;i++){ ret^=arr[i];}return ret; //此时ret即为落单的那个数 变形 消失的数已知一个由0~n(缺失一个数)填充的数组,例[0,6,4,2,3,1],例中的数组少了一个5,而我们已知数组包含0~6中的5个数,就可以将数组元素与0~6按位异或到一起,将问题消失的数转化为问题寻 ...
=C语言=动态内存分配遇上函数-经典错误纠错
直接完整代码12345678910111213141516171819202122#include <stdio.h>#include <stdlib.h>#include <string.h>void GetMemory(char* p) //申请内存{ p = (char*)malloc(100); }void Test(){ char* str = NULL; GetMemory(str); strcpy(str, "hello world"); //复制字符串 printf(str); //输出字符串}int main(){ Test(); return 0;} 分析推测这段代码的的目的是通过GetMemory函数申请内存,然后把返回的地址存入指针变量str,再把字符串"hello world"复制到str所指向的内存中,最后printf输出 逐步纠错GetMemory 首先是传参错误。若在函数内修改外部的一级指针,不能直接将外部一级指 ...
avatar
副驾supdriver
动物界 脊索动物门 哺乳纲 灵长目 人科 人属 智人种
我github还蛮大的
公告
主域名:
supdriver.top
网站资讯
文章数目 :
75
已运行时间 :
本站总字数 :
188k
本站总访问量 :
最后更新时间 :