每日一练-剑指offer
jcsyl_mshot
点滴生活,水落石出。
展开
-
数组调整-奇数位于偶数前
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路分析:这道题要求把奇数放到数组前半部分,偶数放到数组后半部分,,因此所以奇数应该位于偶数前面,因此可以维护两个下标,第一个指向数组第一个位子,只向后移动;第二个指向数组最后一个位置,只向前移动。如果第一个指针指向的数字是偶数...原创 2018-03-25 22:31:05 · 128 阅读 · 0 评论 -
dp_最长公共序列
给定两个字符串A和B,返回两个字符串的最长公共子序列的长度。public class getLCS { //dp[i][j] 表示str1[0...i]与str2[0...j]最长公共子序列长度 //从左到右,从上到下计算dp[i][j].求法如下: //第一列:dp[i][0] 代表str1[0...i]与str2[0]最长公共子序列,str2[0]只有一个字...原创 2018-04-22 21:00:30 · 122 阅读 · 0 评论 -
dp_背包问题
一个背包有一定的承重,有N件物品,每件都有自己的价值,记录在数组v中,也有自己的重量记录在数组w中,要求不超过背包承重前提下,选出物品最大的价值量。//0-1背包问题,要么选择,要不不选择,只有一个public class maxValue {//dp[x][y]表示前X件物品,不超过重量Y时候的最大价值。枚举第X件物品的情况://如果选择第X件物品,则前X-1件物品得到的重量不能超...原创 2018-04-22 22:01:42 · 369 阅读 · 0 评论 -
数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007//第二种递归 给出停止条件,直到最底层才可以对递归结果依次进行处理//第一种递归 同样给出停止条件,在再次调用递归前进行逻辑处理//可以设置全局变量,每次都会更新全局变量pub...原创 2018-04-07 13:25:50 · 87 阅读 · 0 评论 -
2018-3美团编程题
编程题1:给定一个序列,输出这个序列子串的和为K的倍数的子串的长度,如果有重复,输出最大长度。 例如:序列为:{1,2,3,4,5} k = 5 那么子串的和为5的倍数的有{2,3},{1,2,3,4},{1,2,3,4,5},{5} ,而这时长度最大的是5,所以输出5。 int count = 0; for (int i = 0; i < ...原创 2018-04-24 20:48:59 · 237 阅读 · 0 评论 -
2018 网易编程题
牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。 牛牛希望你能帮他计算一共有多少个可能的数对。 解析:import java.util.Scanner;public class Main { public static void main(String[] args...原创 2018-04-24 22:46:43 · 190 阅读 · 0 评论 -
2018-3 腾讯编程题
题目一: n个连续的整数(1,2,3,4…n),然后要每隔m个数进行一次翻转符号,最开始是负号。保证2m整除n,比如n=8,m=2的话,这个序列就是-1,-2, 3, 4, -5, -6, 7 ,8,然后求前n项和 题解:规律很显然,就是3+(-1) = 2, 4+(-2) = 2, 然后就是m*n/2了,但是n和m都要用long long不然会数据溢出的。public class Q...原创 2018-04-24 23:03:12 · 427 阅读 · 0 评论 -
机器人的移动范围
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子? 解析://回溯法 其实就是递归的使用,,,与...原创 2018-04-21 16:31:13 · 759 阅读 · 0 评论 -
剪绳子
给定一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]* k[1] * … *k[m]可能的最大乘积是多少? 解析://动态规划剪绳子 初始为1,2,3 则可以直接判断最大极为0,1,2 大于等于四时候,则开始有选择的剪。使得两边成绩最大public class maxProduct {...原创 2018-04-21 16:33:02 · 170 阅读 · 0 评论 -
dp:word-break
给一个字符串s,和一个字典dict,判断字符串是否能够由字典中词组成? 解析:通过动态规划 如果一个词的前面位置可以由词典位置表示,那我们只需要判断后面位置能不能通过词典表示即可import java.util.HashSet;import java.util.Set;public class wordBreak { public static void main(Strin...原创 2018-06-25 19:33:37 · 443 阅读 · 0 评论 -
list:reorder-List
给一个链表L: L 0→L 1→…→L n-1→L n, 重新排序为: L 0→L n →L 1→L n-1→L 2→L n-2→… 解析: 将链表以中间化分为两个部分,对后半部分反转,然后依次合并两个新链表public class reorderList { public void reorderList(ListNode head) { if(head==...原创 2018-06-25 19:42:07 · 109 阅读 · 0 评论 -
2018-8 网易编程
题目一: 小易觉得高数课太无聊了,决定睡觉。不过他对课上的一些内容挺感兴趣,所以希望你在老师讲到有趣的部分的时候叫醒他一下。你知道了小易对一堂课每分钟知识点的感兴趣程度,并以分数量化,以及他在这堂课上每分钟是否会睡着,你可以叫醒他一次,这会使得他在接下来的k分钟内保持清醒。你需要选择一种方案最大化小易这堂课听到的知识点分值。 输入描述: 第一行 n, k (1 <= n, k <...原创 2018-08-16 11:44:35 · 369 阅读 · 0 评论 -
dp_最长递增子序列
请设计一个尽量优的解放求出序列的最长上升子序列的长度。 解析:该题目是一个最长递增子序列(Attention:LIS并不要求序列中数字连续)。public class getLIS { public int getLIS(int[] A,int n){ int[] dp = new int[n]; int res=0; dp[0]=1...原创 2018-04-22 20:46:50 · 173 阅读 · 0 评论 -
dp_矩阵最小路径
有一个矩阵map,它每个格子都有一个权值。从左上角的格子开始每次只能向右或则向下走,最后达到右下角的位子,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。 解析public class getMinPath { int getMin(int[][]map,int n,int m){ int[][]dp =new int[n][m]; ...原创 2018-04-22 19:08:21 · 278 阅读 · 0 评论 -
dp_找零钱
有数组arr,arr中所有值为正数且不重复,每个值代表一种面值的货币,每中面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求换钱有多少种方法。 解析:public class CoinsCount { /** * @param args * @return */ public static int main(String[...原创 2018-04-22 16:41:12 · 442 阅读 · 0 评论 -
二叉树中路径相关问题
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 解析:import java.util.ArrayList;import java.util.Stack;class TreeNode{ int val =0; TreeNode left = null; TreeNo...原创 2018-04-16 22:00:39 · 364 阅读 · 0 评论 -
调整数组,使奇和偶数分开
1.输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数。public class adjustArrayOddfronteven { public void reOrderArray(int [] array) { int i=0,j=array.length-1; ...原创 2018-04-04 11:56:58 · 660 阅读 · 0 评论 -
字符串的排列
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。//字符串的排列,涉及到字符数组转字符串,递归,数组去重。import java.util.ArrayList;import java.util.HashSet;public class arrangement...原创 2018-04-04 12:01:48 · 77 阅读 · 0 评论 -
栈的压入和出栈
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)import java.util.Stack;//输入两个整数序列,第一个序列表示栈的压入顺...原创 2018-04-04 12:04:11 · 252 阅读 · 0 评论 -
链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点。//获取链表倒数k结点 只遍历一次,双指针搞定//class ListNode{// int val;// ListNode next = null;// ListNode(int val){// this.val = val;// }//}public class lastKnodeInchain { p...原创 2018-04-04 12:06:31 · 72 阅读 · 0 评论 -
合并两个有序链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。//一类递归题 值得关注: 每一次递归得到一次结果,做好下一次递归的链接public class mergingTwoOrderchain { public ListNode Merge(ListNode list1,ListNode list2) { if(list1=...原创 2018-04-04 12:08:49 · 94 阅读 · 0 评论 -
旋转数组最小值
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。//二分法查找定要注意 while(condition) 条件的填写,如果condition无法终止程序,则通过里...原创 2018-04-04 12:10:36 · 206 阅读 · 0 评论 -
反转链表
输入一个链表,反转链表后,输出链表的所有元素。//反转链表,只遍历一次 ,注意到基本链表中 三指针问题//while(node.next!=null) 退出时,用于定位到最后一个节点public class reverseChain { public ListNode ReverseList(ListNode head) { if(head==null) ...原创 2018-04-04 12:14:38 · 197 阅读 · 0 评论 -
连续子数组的最大和
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度至少是1)...原创 2018-04-06 15:26:48 · 99 阅读 · 0 评论 -
最小的K个数
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。import java.util.ArrayList;import java.util.Comparator;import java.util.PriorityQueue;//使用PriorityQueue 阻塞队列,重写比较器,构建大根堆public clas...原创 2018-04-06 15:31:12 · 137 阅读 · 0 评论 -
把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。//拼接最小数字,冒泡+比较函数定义public class MinNumberofArray { public String PrintMinNumber(int [] numbers) { ...原创 2018-04-06 15:33:04 · 107 阅读 · 0 评论 -
丑数
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。//丑数,每个丑数都是由其它丑数*2/*3/*5import java.util.ArrayList;public class uglyNumber { public int GetUglyNumbe...原创 2018-04-06 15:36:47 · 142 阅读 · 0 评论 -
2018 招行编程题
招行题目一: 题目描述: 小招喵喜欢在数轴上跑来跑去,假设它现在站在点n处,它只会3种走法,分别是: 1.数轴上向前走一步,即n=n+1; 2.数轴上向后走一步,即n=n-1; 3.数轴上使劲跳跃到当前点的两倍,即n=2*n 现在小招喵在原点,即n=0,它想去点x处,快帮小招喵算算最快的走法需要多少步?解析:主要注意的点就是条件的判断 如果dp[i+1]已经求出来了,那...原创 2018-08-16 22:04:25 · 862 阅读 · 0 评论