学习中常见算法问题或技巧的小结汇总
Perrysky
喜欢编程
展开
-
常见算法及问题需注意的技巧与简单实现
1、合并两个有序数组A,B,并使合并后的数组在A中。(假设A中有足够的空间存储两个数组中的元素)void mergeSortedArray(int A[],int m, int B[],int n){ int index = n + m;//从后向前粘贴可以避免没有判断的元素被覆盖 while(m>0 && n>0){ if(A[m-1] > B[n-1]){ A[--index] = A[--m];原创 2020-09-23 23:21:34 · 466 阅读 · 0 评论 -
黄迪明C语言课后习题(20复试常考小结)
第四章 数组和结构4.2 N 盏灯排成一排,从 1 到 N 依次编号。有 N 个人也从 1 到 N 依次编号。第一个 人(1 号)将灯全部打开,第二个人(2 号)将凡是 2 和 2 的倍数的灯关闭。第三个人(3 号)将凡是 3 和 3 的倍数的灯做相反处理(即将打开的灯关闭,关闭的灯打开),以后的人 都和 3 号一样,将凡是与自己编号相同的灯和是自己编号倍数的灯做相反处理,请问当第 N 个人操作之后,哪几盏灯是点亮的?试编程求解这个问题,N 由键盘输入。#include<stdio.h>原创 2020-09-23 23:11:04 · 1173 阅读 · 0 评论 -
动态规划问题的学习思路总结
动态规划问题的学习思路总结1、由斐波那契数列引入重叠子问题(斐波那契数列严格来说不是动态规划问题)1)暴力递归int fib(int n){ if( n ==1 || n == 2) return 1; return fib(n-1) + fib(n-2);}时间复杂度为:O(2^n)画出递归树:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fpsBQRSE-1600873191052)(C:\Users\Perry\AppD原创 2020-09-23 23:01:23 · 288 阅读 · 0 评论 -
C语言中比较常见的问题的汇总
C语言常见问题汇总1、在不开辟新的内存空间的情况下,如何交换a,b两个变量中的值?void swap1(int &a,int &b){a = a + b;b = a - b;a = a - b;}void swap2(int &a,int &b){a = a * b;b = a / b;a = a / b;}前两种方法是采用一种简单的加减法、乘除法算法来达到交换两个值的目的。这种方法的缺点是做加法、减法、乘法的时候可能会导致数据溢出。void原创 2020-09-23 22:58:31 · 3374 阅读 · 0 评论 -
贪心算法、分治算法和动态规划的区别
贪心算法、分治算法和动态规划的区别(1)分治法(divide and conquer method)将原问题划分成若干个规模较小而结构与原问题相似的子问题,递归的解决这些子问题,然后再合其结果,就得到原问题的解。特征:该问题的规模缩小到一定的程度就很容易解决该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质利用该问题分解出的子问题的解可以合并为该问题的解;该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题(2)动态规划(dynamic progra原创 2020-09-23 22:54:15 · 8624 阅读 · 0 评论 -
双指针技巧的小结
目录双指针问题 总结1、快慢指针的技巧和常用算法(一般为快指针移动一个位置,慢指针移动两个)(1)可以求未知长度单链表的中间元素(2)可以判断链表是否有环(3)寻找倒数第 k 个节点(4)求一个循环链表的循环开始节点(5)判断两个链表是否相交及找到第一个交点2、左右指针常用的算法与技巧(1)二分查找(很简单) (2) 两数之和 (3) 反转数组...原创 2020-04-03 18:43:53 · 371 阅读 · 0 评论