java数据结构与算法
文章平均质量分 71
学习中呢
一个本科小生的匍匐前进之路
展开
-
1-2n的数存储在空间为n的数组中,找出出现两次的数字,时间复杂度O(n),空间复杂度O(1)
1-2n的数存储在空间为n的数组中,找出出现两次的数字,时间复杂度O(n),空间复杂度O(1)/*奇数零次 偶数零次 0奇数 一次 偶数 零次 -1奇数 两次 偶数 零次 -2奇数 零次 偶数 一次-3奇数 一次 偶数 一次-4奇数 两次 偶数 一次-5奇数 零次 偶数 两次-6奇数一次 偶数 两次-7奇数两次 偶数两次-8*/public...原创 2019-04-09 03:04:21 · 835 阅读 · 0 评论 -
Valid Sudoku(每行、每列、3x3都为1到9)leetcode36
Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:Each row must contain the digits 1-9 without repetition.Each column must contain t...原创 2018-06-13 00:11:12 · 338 阅读 · 0 评论 -
Generate Parentheses(左右括号的全排列)leetcode22
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.For example, given n = 3, a solution set is:[ "((()))", "(()())", "(())()", "()(())", "...原创 2018-05-30 00:51:50 · 411 阅读 · 0 评论 -
Divide Two Integers(不用乘除和模算除法)leetcode29
Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator.Return the quotient after dividing dividend by divisor.The integer division should ...原创 2018-06-06 00:12:25 · 408 阅读 · 0 评论 -
Letter Combinations of a Phone Number(键盘字符的组合)leetcode17
Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent.A mapping of digit to letters (just like on the telephone buttons) is given...原创 2018-05-24 22:57:46 · 210 阅读 · 0 评论 -
Search Insert Position(目标数应该插在数组中的什么位置)leetcode35
Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.You may assume no duplicates in the array.Exam...原创 2018-06-11 23:23:37 · 192 阅读 · 0 评论 -
Implement strStr()(目标字符串在原字符串的位置)leetcode28
Implement strStr().Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.Example 1:Input: haystack = "hello", needle = "ll"Output: 2Example 2:Input:...原创 2018-06-05 00:15:16 · 220 阅读 · 0 评论 -
Merge Two Sorted Lists(合并有序链表)leetcode21
code1:(常规解法)public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1==null) return l2; if(l2==null) return l1; ListNode head=null; ListNo...原创 2018-05-28 22:26:47 · 246 阅读 · 0 评论 -
Longest Common Prefix(字符串数组的最长前缀)leetcode14
Write a function to find the longest common prefix string amongst an array of strings.If there is no common prefix, return an empty string "".Example 1:Input: ["flower","flow","flight"]Output: "fl"E...原创 2018-05-21 22:56:48 · 323 阅读 · 0 评论 -
3Sum Closest(最接近target的三个数字的和)leetcode16
Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input would ...原创 2018-05-23 23:10:23 · 207 阅读 · 0 评论 -
Valid Parentheses(左右小括号中括号大括号匹配)leetcode20
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.An input string is valid if:Open brackets must be closed by the same type of brack...原创 2018-05-27 21:50:28 · 282 阅读 · 0 评论 -
给定一个包含操作符和数字的字符串数组算结果(栈)
Evaluate the value of an arithmetic expression in Reverse Polish Notation.Valid operators are+,-,*,/. Each operand may be an integer or another expression.Some examples: ["2", "1", "+", "3", "*"] -&g..原创 2018-06-20 23:15:00 · 327 阅读 · 0 评论 -
Merge k Sorted Lists(合并k个有序链表)leetcode23
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.Example:Input:[ 1->4->5, 1->3->4, 2->6]Output: 1->1->2->3->4->4...原创 2018-05-31 00:15:38 · 772 阅读 · 0 评论 -
分解质因数
void solution(int num) { int i = 2; while (num != 1) { if (num % i == 0) { System.out.println(i); num /= i; } else { i++; } } }原创 2018-09-29 15:42:28 · 767 阅读 · 0 评论 -
使用ranN()完成ranM()函数的思想
主要就是利用位的思想,把randN()当成一个生成N进制某一位的一个函数,然后生成M的整数倍,当大于M整数倍的时候重新生成 //rand1()生成0和1 使用ran1()生成0-5 思想用位 生成每一位 二进制111为7 生成大于5的时候重新生成 public int random5(){ int result; do{ ...原创 2018-09-14 22:12:16 · 957 阅读 · 0 评论 -
在一个二叉树中找出到子节点的最小深度(树)
public int run(TreeNode root) { if(root==null) return 0; if(root.left==null&&root.right==null) return 1; int leftDepth=0; if(root.left!=...原创 2018-06-19 22:13:08 · 1234 阅读 · 0 评论 -
Search for a Range(在升序数组中找到目标值的左右边界)leetcode34
Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value.Your algorithm's runtime complexity must be in the order of O(log n).If the tar...原创 2018-06-10 22:00:33 · 421 阅读 · 0 评论 -
Search in Rotated Sorted Array(在一个旋转的排序数组以O(logN)查找目标数)leetcode32
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.(i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).You are given a target value to search. If found in t...原创 2018-06-09 20:48:07 · 254 阅读 · 0 评论 -
Reverse Nodes in k-Group(k个一组反转链表)leetcode25
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.k is a positive integer and is less than or equal to the length of the linked list. If the number of ...原创 2018-06-02 01:12:57 · 150 阅读 · 0 评论 -
Longest Valid Parentheses(左右括号的最大连续合法长度)leetcode32
Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.Example 1:Input: "(()"Output: 2Explanation: The longest valid pare...原创 2018-06-08 22:13:22 · 253 阅读 · 0 评论 -
Swap Nodes in Pairs(反转链表相邻两个节点)leetcode24
Given a linked list, swap every two adjacent nodes and return its head.Example:Given 1->2->3->4->5->6, you should return the list as 2->1->4->3->6->5.Note:Your algorithm ...原创 2018-05-31 23:06:04 · 281 阅读 · 0 评论 -
Next Permutation(从后往前字典序列升序,否则交换逆序然后输出。。)leetcode31
从后往前按照字典升序数,碰到不是升序的某个数字(i)则和从后往前数大于i的最小值(j)交换,然后i+1到数组末尾的数逆序.如果从尾到头都是字典升序,则整个数组逆序Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.If ...原创 2018-06-07 23:53:10 · 243 阅读 · 0 评论 -
Substring with Concatenation of All Words(字符串数组全排列在给给丁字符串的索引位置)leetcode30
You are given a string, s, and a list of words, words, that are all of the same length. Find all starting indices of substring(s) in s that is a concatenation of each word in words exactly once and wi...原创 2018-06-07 01:02:38 · 221 阅读 · 0 评论 -
Remove Element(移除目标值的元素并返回新元素的长度)leetcode27
Given an array nums and a value val, remove all instances of that value in-place and return the new length.Do not allocate extra space for another array, you must do this by modifying the input array ...原创 2018-06-03 19:52:28 · 247 阅读 · 0 评论 -
3Sum(在一个数组中找到三个数字的和为0不重复)leetcode15
Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Note:The solution set must not contain ...原创 2018-05-22 23:52:44 · 622 阅读 · 0 评论 -
约瑟夫杀人游戏
据说着名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人 开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。 然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵原创 2017-11-23 00:45:34 · 560 阅读 · 0 评论 -
动态规划(最大公共子序列)
动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被原创 2017-11-23 00:32:51 · 734 阅读 · 0 评论 -
分治算法
棋盘覆盖 题目:在一个(2^k)*(2^k)个方格组成的棋盘上,有一个特殊方格与其他方格不同,称为特殊方格,称这样的棋盘为一个特殊棋盘。我们要求对棋盘的其余部分用L型方块填满(注:L型方块由3个单元格组成。即围棋中比较忌讳的愚形三角,方向随意),且任何两个L型方块不能重叠覆盖。L型方块的形态如下: 题目的解法使用分治法,即子问题和整体问题具有相同的形式。我们对棋盘做一个分割,切割一次后的棋盘如图原创 2017-11-19 23:38:32 · 299 阅读 · 0 评论 -
穷举
泊松分酒有一个12品脱(pint)的酒瓶,里面装满葡萄酒,另有8品脱和5品脱的瓶子各一个。问如何从中分出6品脱的酒出来?传说泊松年轻时成功解决了该问题,勾起了他对数学的兴趣而投身数学研究,因此该问题被称为泊松分酒问题。另外这个问题又被称为分油问题啦,分水问题啦等等。 规则(自己定义规则):大瓶子只能倒入中瓶子中瓶子只能倒入小瓶子小瓶子只能倒入大瓶子public class ShareWin原创 2017-11-08 20:18:38 · 260 阅读 · 0 评论 -
递归
汉诺塔经典递归算法 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。public class HanNota { private int i =原创 2017-11-08 20:03:59 · 401 阅读 · 0 评论 -
二叉排序树和平衡二叉树
什么是二叉排序树? 二叉排序树(Binary Sort Tree)或者是一颗空树;或者是具有以下性质的二叉树: (1)若它的左子树不为空,则左子树上的所有值均小于它根节点上的值;(2)若它的右子树不为空,则右子树上的值均大于根结点的值;(3)它的左右子树也分别为二叉排序树什么是平衡二叉树? 平衡二叉树(Balanced Binary Tree或Height—Balanced Tree)又称原创 2017-09-12 09:07:16 · 4746 阅读 · 0 评论 -
重新学习位运算
位运算符 符号表示 定义 运算结果 按位非 ~ 单数操作,0变1,1变0 按位或 | 两个二进制数相同位只要有一个为1就为1 取大运算(结果不会小于最大的那个数) 按位与 & 同1才1 取小运算(结果不会大于最小的那个数) 按位异或 ^ 相同为0不同为1,00为1,11为1 结果大小无规律 >> 有符号右移 二进原创 2017-08-26 22:02:22 · 554 阅读 · 0 评论 -
折半查找(二分查找)
中间的取值为mid=(low+high)/2不大于mid的最大整数原创 2017-06-21 16:42:23 · 444 阅读 · 0 评论 -
队列的实现
#include #include const int QueueSize=20;typedef struct sqqueu{ char data[QueueSize]; int front,rear;}Squeue;//入队列int EnQueue(SqQueue &sq,char x){ if((sq.rear+1)%Queuesize==sq.front){ retur原创 2017-06-25 14:00:31 · 242 阅读 · 0 评论 -
冒泡排序
//冒泡排序,重点区分基本数据类型和引用数据类型public class Sort { public static void main(String[] args){ int score[] = {67, 69, 75, 87, 89, 90, 99, 100}; for (int i = 0; i < score.length -1; i原创 2017-06-21 16:11:33 · 278 阅读 · 0 评论 -
回溯法(八皇后)
回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为”回溯点”。八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击原创 2017-11-23 02:05:48 · 532 阅读 · 0 评论 -
Palindrome Number(判断一个整数是否是回文串) leetcode9
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.Example 1:Input: 121Output: trueExample 2:Input: -121Output: falseExplanation: F...原创 2018-05-16 23:24:53 · 1005 阅读 · 0 评论 -
Remove Nth Node From End of List(删除链表的倒数第n个节点)leetcode19
Given a linked list, remove the n-th node from the end of list and return its head.Example:Given linked list: 1->2->3->4->5, and n = 2.After removing the second node from the end, the li...原创 2018-05-26 22:05:36 · 147 阅读 · 0 评论 -
Remove Duplicates from Sorted Array(移除重复元素并返回长度)leetcode26
Given a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.Do not allocate extra space for another array, you must do this by modifying...原创 2018-06-02 20:38:48 · 150 阅读 · 0 评论 -
String to Integer (atoi) leetcode8
Implement atoi which converts a string to an integer.The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this ...原创 2018-05-16 00:23:07 · 167 阅读 · 0 评论