![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
每天十道编程题
Steve_Abelieve
致虚极,守静笃。
展开
-
常用算法练习
// 字符串反转void char_reverse(char *cha) { if (strlen(cha) ==0 ) return; char *begin = cha; char *end = cha + strlen(cha) -1; while (begin <end) { char temp = *begin; *(begin++) = *end; *(end--) = temp; }}/.原创 2021-04-11 17:45:18 · 122 阅读 · 0 评论 -
LRU与LFU缓存淘汰算法实现
LRU运用你所掌握的数据结构,设计和实现一个 LRU (Least Recently Used)最近最少使用 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组原创 2021-04-08 23:32:58 · 292 阅读 · 0 评论 -
【算法】1.输出数组最大连续区间的和 2. 最长不含重复字符的字符串
1.输出数组最大连续区间的和动态规划:设f(i) 为长度i的最大连续区间的和。则有f(i) = f(i-1) +a(i) 如果f(i-1)>0f(i) = a(i) 如果f(i-1)<0依次从小大求解f(i)的最大值 int nCurSum = 0; int nBiggestSum = 0; for (int i=0; i< n*m; i++) { if (nCurSum <=0) { nCu原创 2020-09-06 13:35:10 · 286 阅读 · 0 评论 -
【算法练习】贪心算法,两个整数相除,拆分成很多个整数的倒数,输出整数
15min面试时间 算法难度不会很大,不要想的太复杂了越是简单的题目越是要小心,会有各种各样的坑,尤其是基本错误,一定不要犯。要求: p<q,且都是正整数。实现思路:使用贪心算法,每步求出最大的导数值,直到输出结果正确为止。// 数组使用// c++ 熟悉一下 面试很有帮助 牛客网是基于C++面试的int subResult(int a, int b, int *e ,int *f ) { int i=1; if (a ==1) { cout &l原创 2020-08-21 08:37:15 · 282 阅读 · 0 评论 -
【算法练习】排列与组合
实现一个给定数组的排列和组合。排列和组合我们日常生活中一个比较常用的概念,比如计算概率相关问题。在日常面试过程中也会涉及到很多求派列和组合的最优解。下面使用递归方法实现排列和组合代码://// main.cpp// c++algorithm//// Created by 曹亮 on 2020/8/16.// Copyright © 2020 曹亮. All rights reserved.//#include <iostream>using namespace原创 2020-08-16 17:06:06 · 180 阅读 · 0 评论 -
【剑指offer】面试题21:包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到得到栈的最小元素Min函数。在该栈中,调用该push、pop、min的时间复杂度都是O(1).//思路:栈自身的特征:后进先出。如何满足在O(1)的时间内但返回最小的元素?//思路1:将栈排序,将最小的放到前面,每次调用Min()的返回第一个,不过这不符合栈的后进先出的特性了。//思路2:添加一个最小成员存放最小元素,这样的话Min()直接返回该元原创 2017-03-08 01:31:33 · 233 阅读 · 0 评论 -
【剑指offer】面试题22:栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。 假设压入栈的所有数字均不相等,例如压栈序列:1、2、3、4、5。序列:4、5、3、2、1是该栈序列对应的一个弹出序列。//思路:知彼知己方能百战不胜,哈哈。 我们现在判断栈的弹出顺序是否合法,那我们就必须掌握到栈的基本特性:后进先出,(每次弹出栈的栈顶), //那我们知道了栈顶,根据压栈顺序,我们就能原创 2017-03-08 02:35:31 · 315 阅读 · 0 评论 -
【剑指offer】面试题8:旋转数组中的最小数字
//旋转数组中的最小数字//题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转,输入一个递增排序的数组,数组旋转数组的最小元素。//遍历数组一次,找出最小,效率为O(n),显然不是我们想要的结果//旋转数组特性:1.可能为两个递增的数组,找出较小数组中的开头的那个就是要求输入的元素//2.既然为排序好的,那我们可不可以尝试一下二分法去查找呢#include<iostrea原创 2017-03-04 16:40:57 · 458 阅读 · 0 评论 -
【剑指offer】面试题10:二进制中1的个数
如果采用右移的话,负数右移会在前面补1,那么我们取出来的个数就会有问题,甚至如果我们用n作为bool值进行判断时就会陷入死循环。那么,我们采用左移的方式: 解法一:int NumberOf1(int n){ int count = 0; int temp = 1 << 31; for (int i = 0; i < 32; ++i)//最多左移31位 {原创 2017-03-04 17:09:55 · 262 阅读 · 0 评论 -
【剑指offer】面试题11:数值的整数次方
首先,我们分析下可能出现的情况:指数可能为负值,我们先求指数的绝对值次方,然后求导。->求导,那就要考虑分母不为0的情况了。bool g_InvalidInput = false;double Power(double base, int exponent){ g_InvalidInput = false; if (equal(base, 0.0) && exponent < 0)原创 2017-03-04 19:49:05 · 338 阅读 · 0 评论 -
【剑指offer】面试题12:打印1到最大的n位数
整体结构void Print1ToMaxOfDigits(int n){ if (n <=0)//对于n=0也需要限制,因为无法跳出循环,造成死循环 { return; } char *number = new char[n + 1]; memset(number, '0', n + 1); number[n] = '\0';原创 2017-03-04 21:05:42 · 434 阅读 · 0 评论 -
【剑指offer】面试题20:顺时针打印矩阵
//题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. // 例如矩阵: 1 2 3 4 // 5 6 7 8 // 9 10 11 12 // 13 14 15 16 //则顺次打印:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10思路:我们可以定义四个方向原创 2017-03-08 00:25:28 · 318 阅读 · 0 评论 -
实现一个算法,对公司员工年龄进行排序,时间效率要求O(n)
//实现一个算法,对公司员工年龄进行排序,时间效率要求O(n)#include<iostream>void sortAges(int ages[], int length){ if (ages == NULL || length < 0) { return ; } //因为年龄是一个小范围的内,我们可以使用辅助内存 const int old原创 2017-03-04 15:35:14 · 342 阅读 · 0 评论 -
实现一个算法,对公司员工年龄进行排序,时间效率要求O(n)
//实现一个算法,对公司员工年龄进行排序,时间效率要求O(n)#include<iostream>void sortAges(int ages[], int length){ if (ages == NULL || length < 0) { return ; } //因为年龄是一个小范围的内,我们可以使用辅助内存 const int old原创 2017-03-04 15:33:51 · 1481 阅读 · 0 评论 -
对于最常用的排序快速排序的思考
快速排序的整体思想就是分治思想,选取一个基准值,从左右两边各选取一个值进行交换(左边选一个大于基准值的位置,右边选一个小于基准值的位置)。在效果上就是将一个大空间分成了左右两个小空间,然后递归再再将左右两个空间分成更小的两个空间。它和冒泡排序最大的区别就是:冒泡每次交换的是两个相邻的数,而快排的交换距离就大得多。 我们练习一下经典版的快排int a[] = { 5, 3, 1, 8, 6, 8 }原创 2017-03-04 14:00:32 · 328 阅读 · 0 评论 -
【剑指offer】面试题5:链表-从尾到头打印链表
首先,我们复习一下链表的一些基本知识点: 1.创建 2.插入 3.删除struct ListNode{ int m_nValue; ListNode*m_pNext;};//往链表中插入一个结点void AddToTail(ListNode** pHead, int value)//传入二级指针,是因为可能修改头指针,一级指针只能修改形参{ ListNode*原创 2017-03-03 23:59:35 · 290 阅读 · 0 评论 -
【剑指offer】面试题7:用两个栈实现队列
//用两个栈实现一个队列,实现它的两个函appendTail和deleteHead,分别在队列尾部插入结点和在队列头部删除结点的功能//思路:1.栈遵照先入先出的规则,当出队时,应当弹出第一个入栈的元素,但并不在栈顶,因此不能直接删除//2.所以借助栈2,把栈1的元素弹出压入栈2,就实现了逆置,出队时,弹出栈2的值。(此时栈2的栈顶元素就是我们要弹出的元素)我们就很容易解决这个问题了templat原创 2017-03-04 11:26:14 · 289 阅读 · 0 评论 -
【剑指offer】面试题6:重建二叉树
//题目:输入二叉树的前序遍历和后序遍历的结果,请重新构建出该二叉树。假设输入的前序遍历和后序遍历的结果都不含重复的数字。//二叉树的定义#include<iostream>struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};BinaryTre原创 2017-03-04 10:18:14 · 318 阅读 · 0 评论 -
【剑指offer】替换字符串
题目:请实现一个函数,把字符串中的每个空格替换成“%20”,例如输出“We are happy”,则输出“We%20are%20happy”.//思路:如果直接替换,就有可能覆盖修改在字符串后面的内存。如果创建新的字符串并在新的字符串上做替换,我们就可以分配足够多的内存。//对于任何一个函数,我们要做哪些基本的检测//1.传入的参数有效性//2.函数体边界的判断//3.返回值正确返回voi原创 2017-02-28 23:19:49 · 219 阅读 · 0 评论 -
【剑指offer】面试题13:在O(1)时间删除出链表结点
//题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该节点。//链表结点与函数的定义#include<iostream>struct ListNode{ int m_nValue; ListNode* m_pNext;};void DeleteNode(ListNode** pHead, ListNode* pToBeDeleted);void De原创 2017-03-04 23:55:24 · 649 阅读 · 0 评论 -
【剑指offer】面试题14:调整数组顺序使奇数位于偶数前面
//调整数组顺序使奇数位于偶数前面#include<iostream>using namespace std;//基本解法void ReorderOddEven(int *pData, int length){ if (pData == NULL || length <= 0) { return; } //定义两个指针 int *pBegi原创 2017-03-05 00:52:43 · 278 阅读 · 0 评论 -
【leetcode】滑动窗口法训练
第一题: Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray of which the sum ≥ s. If there isn’t one, return 0 instead. For example, giv原创 2017-04-21 21:49:46 · 2366 阅读 · 0 评论 -
【leetcode】 Reverse Vowels of a String(翻转字符串中出现的元音字母)
题目 Write a function that takes a string as input and reverse only the vowels of a string. Example 1: Given s =, return .译文 编写一个将字符串作为输入并仅反转字符串元音的函数。举例: Input Output “leetcode” “leo原创 2017-04-21 12:41:59 · 480 阅读 · 0 评论 -
【leetcode】对撞指针应用之回文字符串判断(忽略大小写,以及出数字外其他字符)
题目: Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases. For example, “A man, a plan, a canal: Panama” is a palindrome. “race a car原创 2017-04-21 11:44:47 · 1283 阅读 · 0 评论 -
【leetcode】Two Sum II - Input array is sorted(输入有序的数组,求两个数的和)
题目: given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two原创 2017-04-21 10:49:24 · 549 阅读 · 0 评论 -
【leetcode】合并两个有序数组
题目:合并两个有序数组Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.Note:You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold原创 2017-04-16 19:55:45 · 3354 阅读 · 0 评论 -
【leetcode】删除数组中指定要求的重复的数字
1. 给定一个数组和一个值,删除该值的所有实例,并返回新长度。 不要为另一个数组分配额外的空间,您必须使用常量内存来进行此操作。元素的顺序可以改变。Given an array and a value, remove all instances of that value in place and return the new length.Do not allocate extra space f原创 2017-04-16 18:28:55 · 1164 阅读 · 0 评论 -
【Leetcode】从排序数组中删除重复元素
题目:给定一个排序的数组,删除重复的位置,使每个元素只显示一次并返回新的长度。不要为另一个数组分配额外的空间,您必须使用常量内存来进行此操作。例如, 给定输入数组nums = [1,1,2],您的函数应返回长度= 2,与前两个元素NUMS是1和2分别Given a sorted array, remove the duplicates in place such that each elemen原创 2017-04-16 16:10:00 · 7081 阅读 · 2 评论 -
【leetcode】链表的基本操作
题目一: Reverse a singly linked list. 1->2->3->NULL NULL-<1-<2-<3解法:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) :原创 2017-04-29 21:27:34 · 2232 阅读 · 0 评论 -
【剑指offer】面试题23:从上往下打印二叉树
题目:从上往下打印二叉树的每个结点,同一层的结点按照从左往右的顺序打印。思路:我们可以用一个队列来保存我们当前结点的左右子树,然后进行出队分别访问左右子树结点,进行打印。#include<iostream>#include<deque>using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode原创 2017-03-09 01:09:55 · 342 阅读 · 0 评论 -
【剑指offer】面试题19:二叉树的镜像
二叉树定义:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode*m_pLeft; BinaryTreeNode*m_pRight;};思路:输出镜像,其实也就是我们在遍历的时候改变它的左右孩子。void MirrorRecursively(BinaryTreeNode*pHead)//镜像的根节点一致,所以不用传二级指针原创 2017-03-05 11:57:32 · 312 阅读 · 0 评论 -
【剑指offer】面试题18:输入两颗二叉树A和B,判断B是不是A的子结构?
二叉树的定义:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};思路: 1.遍历两个二叉树,分别判断其的根节点,左右孩子的值是否相等 2.若根节点值相等,但其左右孩子值不相等,我们需要条跳到根节点上重新进行判断 //递归来说思路比较清晰,我们原创 2017-03-05 11:19:18 · 520 阅读 · 0 评论 -
【剑指offer】面试题17:合并两个排序的链表
//递归实现两个链表的合并ListNode* Merge(ListNode* pHead1, ListNode* pHead2){ if (pHead1 == NULL) { return pHead2; } else if (pHead2 == NULL) { return pHead1; } ListNod原创 2017-03-05 10:26:04 · 293 阅读 · 0 评论 -
【剑指offer】面试题16:反转链表
//题目:定义一个函数,输入一个链表的头结点,反转该链表并输出翻转后链表的头结点//链表的定义如下:struct ListNode{ int m_nValue; ListNode* m_pNext;};ListNode* ReversseList(ListNode* pHead){ ListNode* pReversedHead = NULL; ListNo原创 2017-03-05 02:09:40 · 877 阅读 · 0 评论 -
【剑指offer】面试题15:链表中倒数第k个结点
链表的定义如下:struct ListNode{ int m_nValue; ListNode* m_pNext;};ListNode* FindKthToTail(ListNode*pListHead, unsigned int k){ if (pListHead == NULL||k==0) { return NULL; } L原创 2017-03-05 01:35:35 · 252 阅读 · 0 评论 -
【剑指offer】经典面试题1-赋值运算符重载
题目要求:如下类型CMyString的声明,请为该类添加赋值运算符函数class CMyString{public: CMyString(char* pData = NULL); CMyString(const CMyString&str); ~CMyString(void);private: char* m_pData;};解法:CMyString& oper原创 2017-02-27 23:59:22 · 434 阅读 · 0 评论 -
【日精进】文件拷贝函数,你会写吗?
参数可变函数 定义两个文件指针:FILE*srcFile,FILE*destFile; 基本文件操作函数:fclose(),fopen(),fgetc(),fputc(); 警告:打开一个文件时,要对结果进行判断是否打开/*文件拷贝函数*/#include<stdio.h>int main(int argCount, char*argValue[]){ FILE*srcFile翻译 2017-01-10 12:46:10 · 291 阅读 · 0 评论 -
顺序表经典面试题
头文件如下:#include<stdio.h>#include<windows.h>#include<assert.h>#ifndef _SEQLIST_H_#define _SEQLIST_H_// 实现顺序表的以下接口typedef int DataType;#define MaxSize 10typedef struct SeqList{ DataType array[M原创 2016-12-23 17:33:33 · 802 阅读 · 0 评论 -
【C语言】在终端输⼊多⾏信息,找出包含“ould”的⾏,并打印该⾏。
#include<stdio.h>#include<windows.h>#define MAXLEN 1000//获取一行字符串int getline(char array[], int max){ int ch; int i = 0; while ((ch = getchar())!=EOF&&ch!='\n'&&i < max) { arra原创 2016-11-12 21:28:46 · 439 阅读 · 0 评论 -
【C语言】模拟实现strtsr函数
//模拟实现strtsr函数#include<stdio.h>#include<windows.h>#include<assert.h>char* my_strstr(const char*dststr, const char*substr);int main(){ printf("%s\n", my_strstr("abcdhellojihhello", "hello"));原创 2016-11-12 02:38:29 · 513 阅读 · 0 评论