
算法
主要对力扣上面的题进行分析
郭梧悠
史上最菜程序员
展开
-
力扣之两数相加
原题出处https://leetcode-cn.com/problems/add-two-numbers/,描述如下图:解题思路很简单:当前两个链表的节点node1和node2形成的新节点的值的算法为//上一个节点的进位,比如3+9=12,进位为1 (进位的英文翻译carry)int carry=(preNode1.val+preNode2)/10;int sum = node1.val+node2.val+carry;//比如4+6=10,去余则为0Node newNode = New No原创 2022-03-02 17:04:49 · 2067 阅读 · 0 评论 -
Java 单向链表翻转
链表翻转的思路有很多,再此做个记录。思路一:最简单的思路就是先遍历链表,逐一将链表里的节点放入到栈里面;然后在遍历栈,将栈里的元素在逐一出栈形成新的链表。主要是利用了栈的后进先出的特点。思路二:遍历链表,然后将链表的修改head.next的指向,每一次遍历都将head.next指向已经遍历过得节点就可以了: /** * 链表翻转 * @param node */ public ListNode reverseListNode(ListNode node) { //新链表原创 2022-02-24 16:22:39 · 838 阅读 · 0 评论 -
力扣之删除中间节点
该题是力扣上面的一道难度为简单的题,虽然难度标志为简单,但是确实挺有意思的,下面就来分析分析这道题(原题传送门),题目描述如下:若链表中的某个节点,既不是链表头节点,也不是链表尾节点,则称其为该链表的「中间节点」。假定已知链表的某一个中间节点,请实现一种算法,将该节点从链表中删除。例如,传入节点 c(位于单向链表 a->b->c->d->e->f 中),将其删除后,剩余链表为 a->b->d->e->f 示例:输入:节点 5 (位于原创 2021-05-19 14:58:53 · 299 阅读 · 0 评论 -
力扣之好数对的数目
该题是力扣上面的一道难度为简单的题,虽然难度标志为简单,但是看了大家的解法确实能学到一点东西,下面就来分析分析这道题(原题传送门),题目如下:给你一个整数数组 nums 。如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。返回好数对的数目。示例 1:输入:nums = [1,2,3,1,1,3]输出:4解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始示例 2:原创 2020-08-28 10:51:28 · 522 阅读 · 1 评论 -
《算法设计》求单峰数组
这是算法设计书地171页上的题:假设有n个项的数组A,数组的每个元素都不相同,该数组序列是单峰的:对于某个在0与n-1之间的下标p,数组项的值增加直到A中的位置p,然后剩下的元素减少直到位置n,要求:尽量读很少的元素,就是找到这个顶峰元素p在哪一个位置,下面是具体的递归实现ublic class FindMaxIndex { public static int findM原创 2012-10-18 10:18:32 · 4227 阅读 · 1 评论 -
求一个数组的子集
该题是力扣上面的一个题,感觉思路不错就摘抄下来做个笔记。以后准备定期耍上面的题来提高一下自己的算法基础。题目描述如下:给定一组不含重复元素的正数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2]...原创 2019-03-23 09:07:55 · 2882 阅读 · 0 评论 -
按递增顺序显示卡牌
继续对力扣的一题进行分析,本文分析的是该题在力扣讨论区里面的一个思路比较清晰的解法:倒推法牌组中的每张卡牌都对应有一个唯一的整数。你可以按你想要的顺序对这套卡片进行排序。最初,这些卡牌在牌组里是正面朝下的(即,未显示状态)。现在,重复执行以下步骤,直到显示所有卡牌为止:从牌组顶部抽一张牌,显示它,然后将其从牌组中移出。如果牌组中仍有牌,则将下一张处于牌组顶部的牌放在牌组的底部。如果仍有...原创 2019-03-26 18:28:04 · 800 阅读 · 0 评论 -
有序数组的平方
给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例 1:输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]示例 2:输入:[-7,-3,2,3,11]输出:[4,9,9,49,121]大致看了下该题在力扣的评论,先平方,然后再sort的解题代码还很多。其实这应该不是本题的题意,要不然没必要强调是非递减顺序排序。...原创 2019-03-27 16:42:09 · 1423 阅读 · 1 评论 -
二叉树的遍历
有如下图二叉树前序遍历的规则:根结点 —> 左子树 —> 右子树 或者 currentNode–>currentNode.left–>currentNode.right所以对应的打印顺序为:a b d e g h c f。所以递归的算法代码很好写: public void dlr(Node currentNode) { if(currentNod...原创 2019-04-09 18:33:38 · 624 阅读 · 0 评论 -
八皇后算法解析
今天研究力扣的一道题死活写不出来对应的算法,没办法自己算法基础太差。于是看了下答案,发现使用什么回溯算法,菜鸟表示平时开发期间写的最复杂的程序就是写了两层for循环,已经很牛逼了有木有?这个回溯算法什么鬼?于是乎百度了下,算是了解了回溯算法是什么玩意儿。这里分析一波八皇后算法来加深一下理解。https://blog.youkuaiyun.com/microopithecus/article/details/...原创 2019-05-13 11:07:37 · 50101 阅读 · 9 评论 -
有关回旋数组的程序
package suanfa;import java.util.Scanner;/** * 回旋数组,仿照贪吃蛇的运动轨迹 * @author dell * */public class HuiHuan { /** * @param args */ public static void main(String[] args) {原创 2011-11-28 19:30:58 · 1606 阅读 · 0 评论 -
递归实现回旋数组的小程序
写个算法:打印如下形式的数字9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 8 7 7 7 7 7 7 7 7 7 7 7 7 7 8 9 9 8 7 6 6 6 6 6 6 6 6 6 6 6 7 8 9 9 8 7 6 5 5 5 5 5 5 5 5 5 6 7 8 9 9 8原创 2012-10-13 09:13:34 · 2466 阅读 · 0 评论 -
java双向链表
package datastruct;/**双向链表的的结点*/public class DoubleNode {private DoubleNode previous;// 指向前一个接点的指针private int value;// 接点保存的值private DoubleNode next;// 指向下一个接点的指针public DoubleNode(原创 2011-11-03 09:36:05 · 1197 阅读 · 0 评论 -
双链表java实现(二)
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package arthur.datastruct.programe;import java.util.NoSuchElementException;/** *原创 2012-02-24 22:01:21 · 2059 阅读 · 0 评论 -
栈Stack的相关操作(java)
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package arthur.datastruct.programe;import java.util.*;/** * * @author dell */原创 2012-02-26 11:25:36 · 1084 阅读 · 0 评论 -
有关回旋数的算法(二)
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package arthur.datastruct.suanfa;/** * * @author dell */public class HuiXing {原创 2012-02-29 22:45:15 · 1689 阅读 · 0 评论 -
List模拟
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package arthur.datastruct.programe;import java.util.Iterator;import java.util.NoSuchElementE原创 2012-02-23 21:20:49 · 899 阅读 · 0 评论 -
堆插入和删除的简单实现
import java.util.*;/** *实现的堆的插入和删除操作 * @author Arthur */public class Heap { /** * 递归实现 * 删除一个堆中一个数据的时候,根据堆的性质,应该把相应的位置下移,才能保持住堆性质不变 * @param a 保持堆元素的数组 * @pa原创 2012-09-12 14:30:31 · 3966 阅读 · 1 评论 -
如何计算时间复杂度
文章来源http://blog.youkuaiyun.com/comicray/article/details/4472580定义:如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数 T(n)称为这一算法的“时间复杂性”。当输入量n逐渐加大时,时间复杂性的极限情形称为算法的“渐近时间复杂性”。我们常用大O表示法表示时间复杂性,注意它是某一个算法的时间复转载 2012-09-17 12:30:53 · 1106 阅读 · 0 评论 -
求小于N的正整数中含有1的数字的个数
比如:如果n= 11,那么返回3.因为有1 ,10 ,11下面是具体实现的代码 /** * 判断小于10000的数中含有1的正整数的个数 * @param number * @return */ public static int countOne(int number) { //统计1的个数 int su原创 2012-10-09 08:19:46 · 3414 阅读 · 0 评论 -
求方阵的鞍点(即在行最小列最大的那个点)
package suanfa;import java.util.Scanner;/** * 求矩阵的鞍点,所谓鞍点就是行上最小而列上最大的点 * * @author dell * */public class AnDian { /** * 循环输入方阵的值 * @param n方阵的每一行的长度 * @return一个方阵 */原创 2011-11-26 23:19:08 · 2387 阅读 · 0 评论