- 博客(13)
- 收藏
- 关注
原创 study----填充每个节点的下一个右侧节点指针
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有next 指针都被设置为 NULL。 /** * Definition for a Node. * struct Node { * int val; * struct Node *left; * struct Node ...
2021-07-20 13:45:26
100
原创 study----合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点。 struct TreeNode* mergeTrees(struct TreeNode* root1, struct TreeNode* root2){ if(root1 == NULL){ return root2; } .
2021-07-20 13:20:55
73
原创 study----删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗? /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* removeNthFromEnd(struct ListNode* head, int n){ struct Li..
2021-07-17 20:05:35
86
原创 study----链表的中间结点
给定一个头结点为head的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* middleNode(struct ListNode* head){ //快慢指针 str...
2021-07-17 19:18:53
77
原创 study----反转字符串中的单词
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 char * reverseWords(char * s){ int len = strlen(s); //字符串长度,方便遍历 int q = 0; //主尺标1 while(q < len){ //遍历 int p = q; //副尺标2,方便对整个单词翻转 while(q < len && s[q]...
2021-07-16 01:12:39
105
原创 study----反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。 void swap(char *a,char *b){ char t; t = *a; *a = *b; *b = t; } void reverseString(char* s, int sSize){
2021-07-16 00:36:52
124
原创 study----两数之和,有序数组
给定一个已按照 升序排列的整数数组numbers ,请你从数组中找出两个数满足相加之和等于目标数target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。 int* twoSum(int* numbers, int numbe...
2021-07-15 12:45:50
100
原创 study----移动0
给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。 void swap(int *a, int *b) { int t = *a; *a = *b; *b = t; } void moveZeroes(int *nums, int numsSize) { int left = 0, right = 0; while (right < numsSize) { if (nums[right]) ...
2021-07-15 12:24:23
64
原创 study----旋转数组
给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。 void reverse(int *a,int low,int high){ int temp; for(;low < high;low ++,high --){ temp = a[low]; a[low] = a[high]; a[high] = temp; } } void rotate(int* nums, int num...
2021-07-14 06:54:33
130
原创 study----有序数组的平方
给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。 int* sortedSquares(int* nums, int numsSize, int* returnSize){ int i = 0,j = numsSize - 1; int k = numsSize - 1; int *b =(int *) malloc(sizeof(int)*numsSize); while(i <= j){ ...
2021-07-14 06:14:42
79
原创 study----搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 int searchInsert(int* nums, int numsSize, int target){ int min = 0,max = numsSize-1; while(min <= max) { int p = (min + max)/2; if(nums[p] == tar
2021-07-13 23:54:26
70
原创 study----第一个错误的版本
你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。 假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。 你可以通过调用bool isBadVersion(version)接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。 int first...
2021-07-13 23:49:18
73
原创 study----二分查找
给定一个n个元素有序的(升序)整型数组nums 和一个目标值target ,写一个函数搜索nums中的 target,如果目标值存在返回下标,否则返回 -1。 int search(int* nums, int numsSize, int target){ int min = 0,max = numsSize-1; while(min <= max) { int p = (min + max)/2; if(nums[p...
2021-07-13 23:41:19
66
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅