![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
学习
脆订壳
这个作者很懒,什么都没留下…
展开
-
合并两个有序数组-C语言
合并两个有序数组88. 合并两个有序数组 - 力扣(LeetCode) (leetcode-cn.com)思路和合并两个有序链表相同//两个数组元素分别比较,把数组中小的放到新数组,再把新数组拷回去void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){ //1.动态开辟空间 int* arr = (int*)malloc(sizeof(int) * nums1Size); if (a原创 2022-01-10 00:45:32 · 964 阅读 · 0 评论 -
轮转数组-C语言
轮转数组189. 轮转数组 - 力扣(LeetCode) (leetcode-cn.com)方法一void rotate(int* nums, int numsSize, int k){ int tmp = 0; k = k % numsSize; for(int i = 0; i < k; i++) { tmp = nums[numsSize-1]; // numsSize-2:一定要注意 for(int j =原创 2022-01-10 00:34:30 · 497 阅读 · 0 评论 -
合并两个有序链表-C语言
合并两个有序链表21. 合并两个有序链表 - 力扣(LeetCode) (leetcode-cn.com)定义两个链表head,tail;遍历两个链表list1,list2,找最小。找到后,tail接上,然后移动tail至list1或list2。list1或list2后移。把未遍历过的接到tail后。struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){ if(list1 == N原创 2022-01-09 01:06:26 · 2158 阅读 · 2 评论 -
相交链表-C语言
相交链表160. 相交链表 - 力扣(LeetCode) (leetcode-cn.com)获取两个链表的长度,并判断两个链表最后节点地址是否相同。相同–较长的链表减去长度差。同时递减,获取相同地址的节点。struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) { if(headA == NULL || headB == NULL) return NULL原创 2022-01-07 23:57:43 · 736 阅读 · 0 评论 -
数组的度-C语言
数组的度//给定一个非空且只包含非负数的整数数组?nums,数组的 度 的定义是指数组里任一元素出现频数的最大值。//你的任务是在 nums 中找到与?nums?拥有相同大小的度的最短连续子数组,返回其长度。#include <stdio.h>#define Max_N 50001int findShortestSubArray(int* num, int numsSize);int main(){ int num[7] = {1, 2, 2, 3, 1, 4, 2}; pri原创 2022-01-05 15:23:10 · 959 阅读 · 2 评论 -
删除链表中的倒数第K个结点(双(快、慢)指针)-C语言
删除链表中的倒数第K个结点(双(快、慢)指针)#include <stdio.h>typedef struct ListNode{ int data; struct ListNode *next;}Node;void CreateList(Node **head, int *arr, int n);Node *kNode(Node *head, int k);void printNode(Node *mmp);int main(){ Node *head = NULL原创 2021-12-31 00:48:05 · 135 阅读 · 1 评论 -
找零问题(贪心算法)-C语言
找零问题(贪心算法)#include <stdio.h>int getMinCash(int x, int *cash, int *res);int main(){ int x = 8478; //需要找零总数 int cash[5] = {50, 20, 10, 5, 1}; //零钱种类 int res[5] = {0}; //记录每类使用个数 int ans = getMinCash(x, cash, res); pr原创 2021-12-27 22:32:48 · 2097 阅读 · 0 评论 -
链表中的倒数第K个结点(双(快、慢)指针)-C语言
链表中的倒数第K个结点(双(快、慢)指针)#include <stdio.h>typedef struct ListNode{ int data; struct ListNode *next;}Node;void CreateList(Node **head, int *arr, int n);Node *kNode(Node *head, int k);Node *kkNode(Node *head, int k);void printNode(Node *mmp);原创 2021-12-25 20:37:58 · 84 阅读 · 0 评论 -
环形指针(双(快、慢)指针)-C语言
环形指针Ⅰ(双(快、慢)指针)#include <stdio.h>#include <stdbool.h>typedef struct ListNode{ int data; struct ListNode *next;}Node;void createList(Node **head, int *arr, int n);bool hasCycle(Node *head);void simRing(Node *head);int main(){ Node原创 2021-12-25 20:36:14 · 833 阅读 · 0 评论 -
链表的中间结点(双(快、慢)指针)-C语言
链表的中间结点(双(快、慢)指针)#include <stdio.h>typedef struct ListNode{ int data; struct ListNode *next;}Node;void CreateList(Node **head, int *arr, int n);Node *middleNode(Node *head);void printNode(Node *mmp);int main(){ Node *head = NULL; int a原创 2021-12-25 20:32:09 · 358 阅读 · 0 评论 -
救生艇(双指针)-C语言
救生艇(双指针)#include <stdio.h>void quick_sort(int *a, int left, int right);int numRescueBoats(int* people, int peopleSize, int limit);int main(){ int people[2] = {3, 2, 2, 1}; int limit = 3; int nums = numRescueBoats(people, 4, 3); printf("需要%原创 2021-12-24 22:24:04 · 308 阅读 · 0 评论 -
反转字符串(双指针)-C语言
反转字符串(双指针)#include <stdio.h>int main(){ char ch[5] = {'c', 'h', 'i', 'a', 'n'}; reversrStr(ch, 5); printf("反转后为:%s", ch);}void reversrStr(char *str, int size){ char *left = str; char *right = str + size - 1; while(left < right) { ch原创 2021-12-24 22:22:51 · 461 阅读 · 0 评论 -
搜索插入位置(二分法)-C语言
搜索插入位置(二分法)#include <stdio.h>int searchInsert(int* nums, int numsSize, int target);int main(){ int nums[5] = {3, 4, 6, 7, 8}; int target; while(1) { printf("请输入目标值:"); scanf("%d", &target); int index = searchInsert(nums, 5, target);原创 2021-12-24 22:21:13 · 306 阅读 · 0 评论 -
搜索二维矩阵(二分法、数组指针)-C语言
搜索二维矩阵(二分法)#include <stdio.h>#include <stdbool.h>bool searchMatrix(int (*matrix)[4], int matrixrow, int *matrixcol, int target);int main(){ int matrix[][4] = {{1, 3, 5, 7}, {10, 11, 16, 20}, {23, 30, 34, 60}}; int target = 13; int mat原创 2021-12-23 19:46:54 · 333 阅读 · 0 评论 -
杨辉三角形(递推、指针数组)-C语言
杨辉三角形(递推、指针数组)#include <stdio.h>void triangle(int *arr[], int numRows);void printfTG(int *arr[], int numRows);int main(){ int *arr[10]; triangle(arr, 10); printfTG(arr, 10);}//杨辉三角形void triangle(int *arr[], int numRows){// int *arr[nu原创 2021-12-23 14:06:32 · 469 阅读 · 0 评论 -
斐波那契数列(递推)-C语言
斐波那契数列(递推)记忆化搜索---------数组充当备忘录#include <stdio.h>int Fib(int n);int FibSum(int n);int main(){ int n; while(1) { printf("请问您需要求前几项呢?"); scanf("%d", &n); printf("斐波那契数列第%d项为:%d\n", n, Fib(n)); printf("前%d项斐波那契数列之和:%d\n", n,原创 2021-12-20 22:27:56 · 1795 阅读 · 0 评论 -
泰波那契序列(递推+递归)-C语言
泰波那契序列(递推+递归)记忆化搜索、简单DP#include <stdio.h>int TeponacciDT(int n);int TeponacciSumDT(int n);int TeponacciDG(int n);int TeponacciSumDG(int n);int main(){ int n; while(1) { printf("请问您需要求前几项呢?"); scanf("%d", &n); printf("递推-原创 2021-12-20 22:30:29 · 258 阅读 · 0 评论 -
分数序列、斐波那契数列之和(递归)-C语言
分数序列、斐波那契数列#include <stdio.h>double SeqSum(double mol, double den, int length);int FinSum(int first, int second, int length);int main(){ double mol = 2; double den = 1; int first = 1; int second = 1; int n; while(1) { printf("请问您需要求前几项原创 2021-12-20 16:56:03 · 674 阅读 · 0 评论 -
阶乘(递归)-C语言
阶乘(递归)#include <stdio.h>int Fac(int n);int FacAdd(int n);int main(){ int n; while(1) { printf("请输入您需要求的阶乘值:"); scanf("%d", &n); printf("%d的阶乘:%d\n", n, Fac(n)); printf("%d的阶乘之和:%d\n", n, FacAdd(n)); }}//递归求阶乘int Fac(int n){原创 2021-12-20 15:10:28 · 321 阅读 · 0 评论 -
折半查找-C语言
// 折半查找#include <stdio.h>const int N = 6;void Insert_Sort(int r[], int n);int Bin_Search(int a[], int n, int x); int x, i, j, t;int main(){ int a[] = {5, 2, 4, 6, 1, 3};// 获取数组长度 int n = sizeof(a) / sizeof(int);// 进行排序 Insert_Sort(a, n原创 2021-11-17 18:50:26 · 119 阅读 · 0 评论 -
插入排序-C语言
// 插入排序#include <stdio.h>const int N = 6;void Insert_Sort(int *r, int n);int x, i, j;int main(){ int a[] = {5, 2, 4, 6, 1, 3};// 获取数组长度 int n = sizeof(a) / sizeof(int); Insert_Sort(a, n); for(i = 0; i < n; i++) { printf("%d ", a[i.原创 2021-11-17 18:49:37 · 360 阅读 · 0 评论 -
快速排序-C语言
// 快速排序#include <stdio.h>int a[101], n;void quick_sort(int left, int right){ int i, j, t, temp;// 递归终止条件 if(left >= right) return;// 存储基准值 temp = a[left]; i = left; j = right; while(i != j) {// 顺序必须是从右往左找 这样可以把小的置换到左边 while原创 2021-11-17 18:48:31 · 53 阅读 · 0 评论 -
选择排序-C语言
// 选择排序#include <stdio.h>int main(){ int a[100], i, j, n, t;// 输入要排序的个数 scanf("%d", &n); for(i = 0; i < n; i++) {// 手动输入排序的数值 scanf("%d", &a[i]); }// 进行选择排序 需要排n-1轮固定一个索引的值与其他索引的值相比较 for(i = 0; i < n-1; i++) { fo原创 2021-11-17 18:45:15 · 210 阅读 · 0 评论 -
冒泡排序-C语言
// 冒泡排序#include <stdio.h>int main(){ int a[100], i, j, n, t;// 输入要排序的个数 scanf("%d", &n); for(i = 0; i < n; i++) {// 手动输入排序的数值 scanf("%d", &a[i]); }// 进行冒泡排序 需要排n-1轮 for(i = 0; i < n-1; i++) { for(j = 1; j < n-i;原创 2021-11-17 18:43:50 · 216 阅读 · 0 评论 -
桶排序-C语言
#include <stdio.h>int main(){// 5个0-9之间的数进行排序--桶排序 int a[10], i, j, t;// 存储的a[0]-a[9]的桶进行清零 for(i = 0; i < 10; i++) { a[i] = 0; } // 写入要排序的5个0-9之间的数 for(i = 1; i <= 5; i++) { scanf("%d", &t);// 把相应的数加入相应的桶中 a[t]++; }原创 2021-11-17 18:42:11 · 330 阅读 · 0 评论 -
四数之和-python
class Solution: # 分治法 def fourSum(self, nums, target): # 排序 nums.sort() results = [] self.findNsum(nums, target, 4, [], results) return results # tempList 每次固定一个数进行存储 def findNsum(self, nums, target,原创 2021-11-14 16:16:57 · 504 阅读 · 0 评论 -
三数之和-python
class Solution: def threeSum(self, nums): n = len(nums) # 升序 下面去重要用到 nums.sort() res = [] # 找到三数之和等于0,只需要循环n-3次 for i in range(n - 2): # 去除邻近相同元素 if i > 0 and nums[i] == nums[i原创 2021-11-12 17:21:14 · 408 阅读 · 0 评论 -
两数之和-python
class Solution: # 排序 + 双指针 def twoSum1(self, nums, target): n = len(nums) # 升序 nums.sort() # 声明双指针索引 l = 0 r = len(nums) - 1 while (l < r): if (nums[l] + nums[r] < target):原创 2021-11-10 15:45:06 · 682 阅读 · 0 评论