![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
解题套路
小马哥MAX
刷题记录BLOG
展开
-
【C与指针】数组与指针的关系
数组名的值是一个指针常量,也就是数组第一个元素的地址。它的类型取决于数组元素的类型,如果它们是int类型,那么数组名的类型就是“指向int的常量指针”。只有在两种场合下,数组名并不用指针常量来表示---就是当数组名作为sizeof操作符或单目操作符&的操作数时。sizeof返回整个数组的长度,而不是指向数组的指针长度。取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某个常量值...原创 2018-06-23 22:56:51 · 163 阅读 · 0 评论 -
写一个java死锁程序
只需要模拟持有并请求,即线程0获得A锁后又去请求B锁,线程1获得B锁后又去请求A锁,由于循环依赖导致彼此一直在等待。DeadLock.javapublic class DeadLock implements Runnable{ private String str1; //锁A private String str2; //锁B public D...原创 2019-06-17 14:42:58 · 435 阅读 · 0 评论 -
堆排序
直接在原数组上进行排序,时间复杂度O(nlogn),空间复杂度O(1)前置知识:由于直接从数组排序,所以序号从0开始,可以得到parent(i) = (i-1)/2left child(i) = 2*i+1right child(i) = 2*i+2解题分为两个步骤:(1)先将原数组进行heapify,变成一个最大堆。也就是从第一个非叶子节点(即最后节点的父节点)开始向上遍...原创 2019-05-21 21:37:59 · 147 阅读 · 0 评论 -
生产者消费者模型实现
1、使用BlockingQueuemain.classpublic class Solution1006 { public static void main(String[] args) { //Creating shared object BlockingQueue sharedQueue = new LinkedBlockingQueue();...原创 2018-11-14 16:15:11 · 149 阅读 · 0 评论 -
归并排序(最终版)
动画演示归并过程Merge设置一个辅助空间aux(图下二数组)代码优化,merge操作只在arr[mid] > arr[mid+1]时进行,否则说明两部分是有序的,这样当数组接近有序的情况,归并次数减少,效率提高。void mergeSort(int[] arr){ mergeSort(arr, 0, arr.length-1); ...原创 2019-04-02 11:26:07 · 164 阅读 · 1 评论 -
【两次过】Lintcode 69:二叉树的层次遍历
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)样例给一棵二叉树{3,9,20,#,#,15,7}: 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]挑战挑战1:只使用一个队列去实现它挑战2:用DFS算法来做解题思路: 利用一个队列来辅助层级遍...原创 2018-05-13 09:56:53 · 186 阅读 · 0 评论 -
【三次过】Lintcode 134. LRU缓存策略
为最近最少使用(LRU)缓存策略设计一个数据结构,它应该支持以下操作:获取数据(get)和写入数据(set)。获取数据get(key):如果缓存中存在key,则获取其数据值(通常是正数),否则返回-1。写入数据set(key, value):如果key还没有在缓存中,则写入其数据值。当缓存达到上限,它应该在写入新数据之前删除最近最少使用的数据用来腾出空闲位置。样例样例1输入:...原创 2019-03-11 10:05:27 · 278 阅读 · 0 评论 -
【总结】二叉树的前、中、后序遍历的递归实现与非递归JAVA实现
一、二叉树的前序遍历1、递归实现1:Traversepublic List<Integer> preorderTraversal(TreeNode root) { // write your code here List<Integer> list = new ArrayList<>(); ...原创 2018-08-30 10:49:38 · 227 阅读 · 0 评论 -
完美二分查找法【JAVA版】
public int binarySearch(int[] nums, int target) { // write your code here if(target>nums[nums.length-1] || target<nums[0]) return -1; int l = 0 , r ...原创 2018-08-29 19:49:28 · 210 阅读 · 0 评论 -
快速排序完美优化版【JAVA】
相比较原始快排,这里优化了两个地方:优化1:为防止在近乎有序的数组,partition分割极度不平衡,可将v元素随机化选取优化2:递归到一定程度可使用插入排序另外为了方便大家理解partition过程,附图一张: public void quickSort(int[] nums){ if(nums == null || nums.length <=0)...原创 2018-08-31 21:13:19 · 1792 阅读 · 2 评论 -
常用O(n^2)排序算法总结【JAVA版】
1、插入排序(初版) public void insertSort(int[] nums){ if(nums == null || nums.length<=0) return; for(int i=1 ; i<nums.length ; i++){ for(int j=i ; j>0 ; j--){ ...原创 2018-08-30 21:47:14 · 243 阅读 · 1 评论 -
实现一个最基本的String类【C++】
题目:实现String类的构造函数、析构函数并重载赋值操作符。解答:class String{public: String(); String(const char *pStr); String(const String &str); String &operator=(const String &str); vi...原创 2018-07-20 22:22:51 · 577 阅读 · 0 评论 -
文件的读入与写入
一、文件的读取1、按字符读取如果我们要取的数据基本单位是单个字符,那么用这种方法读取文件就比较适合。比如:txt文件如下,我们需要取出其中的每一个字母存入一个数组中。也就是一次性读取文件中所有字符。利用FileReader中的read()方法。FileReader.read(char[] cbuf),参数——cbuf是目标缓冲区;返回——读取的字符串数量,如果已达到末尾则返回-1。...原创 2019-07-02 15:50:42 · 3775 阅读 · 0 评论