![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
IFollowRivers
now is everything!
展开
-
二分搜索——在有序数组中找到目标函数出来的最左端的位置
案例二:在数组中找到目标函数出来的最左端的位置用上述数组来举例说明过程:目标函数为3,用res来记录最后找到目标元素的位置,初始为-1,表示目标函数不存在。把目标函数3和最中间的元素4做比较,4比3大,则抛弃数组的右半部分(包括最中间的4),接下来找到数组剩下部分 1 2 3 3 3 3 4的中间值和3作比较,相等,则更新res的值,res=3;但是由于不确定是否是原创 2017-06-28 21:37:27 · 510 阅读 · 0 评论 -
字符串——旋转字符串
技巧:与字符串交换的面试题目,大部分是活用局部逆序函数这么一个组合的过程,需重点掌握该技巧!这道题和剑指Offer的字符串的左旋转操作基本一样(前者n代表下标,后者代表位数)思路:public class RotateString { public static String rotateString(String str, int n){ if(str.l原创 2017-07-04 17:38:45 · 350 阅读 · 0 评论 -
字符串——拼接最小字典
对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的。给定一个字符串数组strs,同时给定它的大小,请返回拼接成的串。测试样例:["abc","de"],2"abcde"public class CombineString { public static void main(String[原创 2017-07-08 11:01:31 · 1282 阅读 · 0 评论 -
排序相关——二维数组中的查找
二维数组的行和列都是排好序的,判断二维数组中是否存在整数K,如果存在,则返回true,不存在,则返回false。 public boolean Find(int target, int [][] array) { int row=array.length-1; int col=0; while(col=0){原创 2017-07-18 16:42:44 · 344 阅读 · 0 评论 -
排序相关—— 相邻两数的最大差值( Maximum Gap-LeetCode)
题目链接:https://leetcode.com/problems/maximum-gap/#/description参考答案:http://www.programcreek.com/2014/03/leetcode-maximum-gap-java/给定一个整型数组arr,返回如果排序之后,相邻两数的最大差值。例如:某数组排序之后为 1 2 3 4 7 8 9,最大差值来自于4原创 2017-07-18 21:11:19 · 1817 阅读 · 0 评论 -
排序相关——荷兰国旗问题
给定一个数组,它包括0,1,2三种数,如何做到0放到数组的左边,1放到数组的中间,2放到数组的右边。要求使用交换、原地排序,而不是利用计数进行排序。这个问题其实就是荷兰国旗问题:现有n个红白蓝三种不同颜色的小球,乱序排列在一起,请通过两两交换任意两个球,使得从左至右的球依次为红球、白球、蓝球。这个问题之所以叫荷兰国旗,是因为将红白蓝三色的小球弄成条状物,并有序排列后正好组成荷兰国旗。原创 2017-07-14 21:43:21 · 887 阅读 · 0 评论 -
动态规划——背包问题
dp[i][j]表示前i件物品,在不超过容量为j的背包的最大价值。public static int knapsackProblem(int Capacity, int N, int[] v, int[]w){ int[][] dp = new int[N+1][Capacity+1]; for(int i=0;i<=N;i++){ dp[i][0]=0; } for(i原创 2017-08-16 19:35:48 · 330 阅读 · 0 评论 -
动态规划——Word Break 拆分词句【LeetCode】
题目链接:https://leetcode.com/problems/word-break/description/Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine if s can be segmented into a spac原创 2017-08-18 16:10:23 · 602 阅读 · 0 评论 -
动态规划——Unique Binary Search Trees 独一无二的二叉搜索树【LeetCode】
题目链接:https://leetcode.com/problems/unique-binary-search-trees/description/Given n, how many structurally unique BST's (binary search trees) that store values 1...n?For example,Given n = 3,原创 2017-08-18 19:33:57 · 498 阅读 · 0 评论 -
动态规划——最大连续子数组和(或乘积)
public static int maxSubArray(int[] nums) { if (nums == null || nums.length == 0) return 0; int curr = 0; int sum = Integer.MIN_VALUE; for (int i = 0; i < nums.length; i++) { curr += num原创 2017-08-20 17:04:18 · 1133 阅读 · 0 评论 -
二分法——【Search Insert Position】【Search for a Range】【数字在排序数组中出现的次数】
【Search Insert Position】 https://leetcode.com/problems/search-insert-position/description/Given a sorted array and a target value, return the index if the target is found. If not, return the原创 2017-08-22 22:27:54 · 359 阅读 · 0 评论 -
字符串——将字符串间的单词做逆序调整
思路:public class ReverseSentence { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(reverseSentence("I'm a student")); System.out.println原创 2017-07-04 17:33:35 · 1528 阅读 · 0 评论 -
字符串——最长无重复子串
转自:https://discuss.leetcode.com/topic/8232/11-line-simple-java-solution-o-n-with-explanationthe basic idea is, keep a hashmap which stores the characters in string as keys and their positions as转载 2017-07-11 19:32:35 · 383 阅读 · 0 评论 -
字符串——判断一个括号字符串是否匹配
时间复杂度为O(N),空间复杂度为O(1),代码为isMatch函数类似的题目:从键盘读入一个字符串,其中只含有() {} [ ] ,判断该字符串中的每种括号是否成对出现。提示:可借助栈来实现,括号必须配对出现,如()[ ]{},这是匹配的括号,如([{])},这是不匹配的括号(中间无空格)。(isMatch_2函数))思路:1. 括号匹配的四种原创 2017-07-11 15:50:00 · 2756 阅读 · 0 评论 -
二分搜索——局部最小值位置
案例一:局部值最小位置值原创 2017-06-28 20:31:42 · 1162 阅读 · 0 评论 -
比特位操作——O(1)时间检测2的幂次
用 O(1) 时间检测整数 n 是否是 2 的幂次。您在真实的面试中是否遇到过这个题? Yes样例n=4,返回 true;n=5,返回 false.solution: 在O(1)时间内判断一个整数是否为2的幂次,只能使用位操作。因为2的幂次数其二进制表示中1的个数只有一个而其他的数则没有这情况。而2的幂次减1除了那位为0其他位为1。 例如转载 2017-06-27 20:12:53 · 609 阅读 · 0 评论 -
比特位操作——二进制中有多少个1
举一反三:http://blog.csdn.net/ifollowrivers/article/details/73744489 (这两道题思路一模一样)计算在一个 32 位的整数的二进制表式中有多少个 1.您在真实的面试中是否遇到过这个题? Yes样例给定 32 (100000),返回 1给定 5 (101),返回 2给定原创 2017-06-27 19:38:29 · 1644 阅读 · 0 评论 -
比特位操作——二进制表示
转自:http://blog.csdn.net/shinanhualiu/article/details/50405295给定一个数将其转换为二进制(均用字符串表示),如果这个数的小数部分不能在 32 个字符之内来精确地表示,则返回 “ERROR”。样例 n = “3.72”, 返回 “ERROR”.n = “3.5”, 返回 “11.1”.public cla转载 2017-06-27 19:23:52 · 1622 阅读 · 0 评论 -
比特位操作——更新二进制
转自:http://blog.csdn.net/shinanhualiu/article/details/49027891给出两个32位的整数N和M,以及两个二进制位的位置i和j。写一个方法来使得N中的第i到j位等于M(M会是N中从第i为开始到第j位的子串) 样例 给出N = (10000000000)2,M = (10101)2, i = 2, j = 6 返回 N = (100转载 2017-06-26 21:57:40 · 2503 阅读 · 0 评论 -
二分搜索——找出有序循环数组中的最小值
题目链接:http://www.lintcode.com/zh-cn/problem/find-minimum-in-rotated-sorted-array-ii/假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。你需要找到其中最小的元素。数组中可能存在重复的元素。 注意事项The array原创 2017-06-29 11:02:40 · 1275 阅读 · 0 评论 -
二分搜索——返回有序数组中数组值等于下标值的最左位置
给定一个有序递增数组arr,其中不含有重复元素,请找到满足arr[i]==i条件的最左的位置。如果所有位置上的数都不满足条件,返回-1.思路:设置变量值res=-1,表示最后一次找到arr[i]==i的位置,初始值为-1表示没有找到考虑以下情况,M代表中间位置:1. arr[0]>N-1,由于整个数组是递增的,所以0~N-1范围内不可能出现arr[i]==i的原创 2017-06-30 14:55:53 · 1279 阅读 · 0 评论 -
二分搜索—— 完全二叉树统计节点个数
补充内容:做2的幂时不要用Math.pow,这样会超时。用1转自:http://blog.csdn.net/freeelinux/article/details/53679708(二分法)递归法请参考:http://www.cnblogs.com/grandyang/p/4567827.html【题目】给定一棵完全二叉树的根节点root,返回这棵树的节点原创 2017-06-30 19:55:38 · 712 阅读 · 0 评论 -
必须知道的八大种排序算法【java实现】
转自:http://www.jianshu.com/p/8c915179fd02一、冒泡排序 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 冒泡排序的示例:转载 2017-06-09 21:50:57 · 284 阅读 · 0 评论 -
二分搜索——求K的N次方
如果更快的求一个整数k的n次方。如果两个整数相乘并得到结果的时间复杂度为O(1),得到整数k的N次方的过程请实现时间复杂度为O(logN)的方法。给定k和n,请返回k的n次方,为了防止溢出,请返回结果Mod 1000000007的值。测试样例:2,3返回:8比如求10^75:思路:将N转化成二进制形式,先求出10^1,根据两个10^1可以求出原创 2017-07-01 16:32:47 · 1617 阅读 · 0 评论