自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 问答 (2)
  • 收藏
  • 关注

原创 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 3

class Solution {public: int lengthOfLongestSubstring(string s) { if (s.size() == 0) { return 0; } int res = 0;//记录结果 unordered_set<char> temp;//用来存储字符 int i = 0; int k = 0;//s的下标 int len = s.size(); for (i = 0; i<len; i++)/.

2021-12-03 14:12:34 448

原创 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。49

class Solution {public: vector<vector<string>> groupAnagrams(vector<string>& strs) { //这个问题实际上是给一个字符串数组然后叫你把他按一定的规则把这个数组分组。 unordered_map<string, vector<string>> mp; for (string& str : strs) { string key.

2021-11-25 15:29:07 928

原创 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。27

class Solution {public: int removeElement(vector<int>& nums, int val) { if (nums.size() == 0){ //nums不是指针,不能写nums == NULL return 0; } int l = 0; int r = nums.size() - 1; while (l<r)//l等于r不用交换。l>r说明已经遍历完了,l前面的都不为val,r后面的都为va.

2021-11-24 22:44:39 493

原创 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 24题

递归class Solution {public: ListNode* swapPairs(ListNode* head) { //使用了递归,每次做了两个结点的交换并且连接下一个头结点。 if(head == nullptr || head->next == nullptr) return head; ListNode* next = head->next; head->next = swapPa

2021-11-24 21:51:43 572

原创 给定一个非负整数 x ,计算并返回 x 的平方根,即实现 int sqrt(int x) 函数。正数的平方根有两个,只输出其中的正数平方根。如果平方根不是整数,输出只保留整数的部分,小数部分将。072

class Solution {public: int mySqrt(int x) { if(x == 0) return 0; int left = 1; int right = x/2+1;//一个数的平方根的范围是在1到x/2之间。 int index = -1; int mid = 0; while(left<=right)//返回的是整数 { .

2021-11-24 15:11:22 870

原创 给你一个整数数组 nums ,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。724题

class Solution {public: int pivotIndex(vector<int>& nums) { int total = 0; int i = 0; int sum = accumulate(nums.begin(), nums.end(), 0); for (i = 0; i<nums.size(); i++) { total += nums[i]; if (total == sum) { return i.

2021-11-23 22:57:20 386

原创 二分查找aaa

#include<stdio.h>int main(){ int low = 0, high = 14, mid, x; int static a[15] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 }; printf("put a number:"); scanf_s("%d", &x); if ((x > a[high]) || (x < a[low])) { printf(".

2021-11-23 22:39:15 165

原创 街上有 n 栋房子整齐地排成一列,每栋房子都粉刷上了漂亮的颜色。给你一个下标从 0 开始且长度为 n 的整数数组 colors ,其中 colors[i] 表示第 i 栋房子的颜色。2078.

class Solution {public: int maxDistance(vector<int>& colors) { int i = 0; int j = 0; int res = 0; for (i = 0; i<colors.size(); i++) { for (j = i + 1; j<colors.size(); j++) { if (colors[i] != colors[j]) { res .

2021-11-23 15:04:09 641

原创 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。206.反转链表。

1 递归法class Solution {public: ListNode* reverseList(ListNode* head) { //递归用于可以把大问题化成小问题的问题,并且大小问题的性质相同,不断重复的问题。 //为什么要从后面开始反转?若从后面开始反转在前面的结点是可以记住后面的。 if(head == nullptr||head->next == nullptr) { return head;

2021-11-23 09:49:15 1508

原创 547.省份数量

void dfs(int i, bool* visted, vector<vector<int> >& isConnected, int len){ visted[i] = true; int j = 0; for (j = 0; j<len; j++) { if (isConnected[i][j] == 1 && visted[j] == false)//如果有关联并且不属于一个省份。 { dfs(j, visted, is.

2021-11-22 21:28:31 307

原创 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 合并两个有序链表。

class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (l1 == nullptr) return l2; if (l2 == nullptr) return l1; if (l1->val <= l2->val) { l1->next = mergeTwoLists(l1->next, l2); return l1; }.

2021-11-21 11:21:51 761

原创 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。两数之和。

class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int>B(2,-1); map<int,int>A; int i = 0; for(i = 0;i<nums.size();i++) A.insert(pair<int,int>(nums[i],i)); fo.

2021-11-21 08:16:12 933

原创 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。两数相加。

struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {}};class Solution {public: ListNode* addTwoNumbers(ListNode* l1, Lis.

2021-11-20 17:51:17 1197

原创 给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串 s ,判断字符串是否有效。有效括号。

class Solution {public: bool isValid(string s) { stack<char> st;//为什么要使用栈?栈是先进后出的,一一对应,与括号的匹配类似 unordered_map<char, int>m{ { '(', 1 }, { '{', 2 }, { '[', 3 }, { ')', 4 }, { '}', 5 }, { ']', 6 } };//用无序的map,查找效率更高。若不用map,一个一个来检查是什么符号的话 .

2021-11-20 17:34:53 330

原创 模拟实现memmove

void* my_memmove(void*dest, void*src, size_t n)//从src指向的字节开始复制n个字节到dest指向的字节处{ char*p = (char*)dest; char*q = (char*)src; while(dest <= src && n--) { *p = *q; p++; q++; } if(dest > src)//当if的条件成立执行的操作不需要操作就不要放在while里。 { .

2021-10-29 15:43:22 76

原创 实现memcpy

void* my_memcpy(void* dest,const void* src,size_t num){ char*p = (char*)dest;//因为dest是void*所以不能直接解引用和加加(运算)所以可以先把他赋值给一个char* //然后逐字节赋值。 char*q = (char*)src; while (num--)//num 为多少,就能循环几次。 { *p = *q; p++; q++; } return dest;}int main(){.

2021-10-28 22:28:00 57

原创 模拟实现strcmp

int my_strcmp(const char*str1, const char*str2){ assert(str1 && str2); while (*str1 == *str2 && *str1)//第一个元素相等则进入,不相等则直接返回,若只有一个'\0',此时不满足第一个条件。 { str1++; str2++; } return *str1 - *str2;}int main(){ int ret = 0; char st.

2021-10-28 20:47:59 52

原创 模拟实现strchr

char* my_strchr(const char*str1,const char s){ if (str1 == NULL) //这里不用断言,若碰到空指针就返回NULL就行了。 { return NULL; } while (*str1 != s &&*str1) { str1++; } if (*str1 != '\0') return (char*)str1; else return NULL;}int main(){ char str.

2021-10-28 16:58:11 83

原创 模拟实现strstr

const char* my_strstr(const char* a,const char* b){ assert(a && b); unsigned int i = 0;//因为下面要和strlen的返回值比较,他的返回值是unsigned int for ( i = 0; i<strlen(a) ;i++) { if ((a[i] == b[0]) && (strncmp(a+i,b,strlen(b)) == 0))//第二个条件可以有效.

2021-10-28 16:25:26 41

原创 模拟实现strcat

char* my_strcat(char*dest,const char*src){ char*p = dest; assert(dest && src); //while (*dest++) error dest 先自己加1再返回原来的值进行解引用,所以出循环的时候dest是‘\0’后面元素的地址。 while (dest != '\0') { dest++; } while (*dest++ = *src++)//dest 和 sor先自加1,返回原来的.

2021-10-28 08:30:25 94

原创 模拟实现strcpy

void my_strcpy(char*dest,const char*src)//const 有防止把长的字符串拷贝到短的字符窜中,若发生这 种情况程序会崩溃。{ assert(dest != NULL);//若为空指针无法解引用,强行操作代码无法运行 assert(src != NULL); while (*dest++ = *src++)//先赋值再加加,当src = ‘\0’,赋值表达式的值为其asc码值0(因为赋的是‘\0’的按asc码值), .

2021-10-27 14:39:07 42

原创 喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少瓶汽水。编程实现。

int main(){ int a = 20; int he = 0; int kong = 0; he = a; kong = he; while (kong > 1)//只要空瓶有两个或以上就能继续换来喝。 { he = he + kong / 2; kong = kong / 2 + kong % 2; } printf("%d\n", he); return 0;}

2021-10-27 12:30:03 255

原创 一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个只出现一次的数字,编程实现。

void Find(int a[],int len,int*p,int *q){ int i = 0; int ret = 0; for (i = 0; i <len ; i++) { ret = ret^a[i];//相当于ret = 0^a[0]^...^a[len - 1],最后等于不同的两个数异或 } int j = 0; for (j = 0; j < 32; j++) //这里的j是有意义的——找到这两个数二进制补码中不同的位置. { if ((ret .

2021-10-27 11:24:24 78

原创 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1 =AABCD和s2 = BCDAA,返回1给定s1=abcd和s2=ACBD,返回0.AABCD左旋一个字符得到ABCD

void left_move(char s1[], int i){ int len = strlen(s1); while (i--) //若i为2,该循环就执行两次,每一次就是左旋转1个字符 { int j = 0; char temp = s1[0]; for (j = 0; j < len - 1; j++) { s1[j] = s1[j + 1]; } s1[j] = temp; }}int panA(char s1[], char s2[].

2021-10-26 21:00:31 75

原创 1.实现一个函数,可以左旋字符串中的k个字符。ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB(左旋转字符的操作)

void left_move(char arr[], int k){ int i = 0; int sz = strlen(arr); int j = sz - k; while (j < sz) { arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; arr[i] = arr[i] ^ arr[j]; i++; j++; }}int main(){ char arr[] = "ABCD"; int k =.

2021-10-25 11:15:01 84

原创 有一个二维数组.数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字是否存在。时间复杂度小于O(N);

void find_k(int(*a)[3], int k,int*p,int*q)//数组指针要这样传,要指明数组个数[3]{ int i = 0; int j = sizeof(*a) / sizeof(*a[0]) - 1;//*a表示第一行数组名 /*有两种情况跳出循环,第一种是如果再继续进行循环就越界访问了, 也就是找不到该数。第二种是找到该数了,但这里不能直接写while的括号里, 如果写在这里就不能进行循环中的返回下标数的操作,只能在找到该数后在循环 中用break.

2021-10-25 10:18:52 154

原创 输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。

void adju(int*arr,int sz){ int i = 0; int j = sz - 1; while (i<j) { while (i<sz && arr[i] % 2 == 1)//找到前面的偶数 { i++; } while (j>=0 && arr[j] % 2 == 0)//找到后面的奇数 { j--; } if (i < j)//如果偶数在前面,奇数在后面才进行交换.

2021-10-25 09:00:02 757

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除