数据结构与算法
橘子汽水$
勇往直前,保持初心~~~
展开
-
给定一个数组,使用二分查找法,查找给定数的索引
给定一个数组,使用二分查找法,查找给定数的索引输入:2008输出:8代码如下:package com.me.test;import java.util.Scanner;public class Main { public static void main(String[] args) { int[] arr = {2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016.原创 2020-08-27 17:14:31 · 651 阅读 · 0 评论 -
java中怎么从一个数组中截取一定长度的元素放到新数组中
可以直接用Arrays的静态方法copyOfRange(int[] original, int from, int to)。下面是一个简单的演示程序。public class SlipArray{ public static void main(String[] args) { int [] data = {1,2,3,4,5,6,7,8,9}; int [] newData; newData = Arrays.copyOfRange(da转载 2020-08-25 11:27:58 · 2647 阅读 · 0 评论 -
CodeForces 448C(分治)
题意:有n个长度不一样的木板(竖着放),刷子宽度是1,每次只能横着刷或者竖着刷。求能刷完全部木板的最小次数。题记:我们每次都先打横刷(即在这一组木板中找到最短的木板),每次都与全部打竖刷取最小值。之后递归即可。例如:5 3 1 2 2首先打横刷一次,就变成了:4 2 0 1 1这时我们递归左边(4,2)+右边(1,1)+1,每次递归的值都要与竖着刷的情况取最小值,就像左边(4,2)的情况,打横刷是3次(两次横一次竖),全部打竖刷是2次,所有左边取最小值2,同理右边取最小值1,再加上一开始.转载 2020-08-25 10:35:21 · 223 阅读 · 0 评论 -
java实现:将一个数各个位数相加
import java.util.Scanner;public class HelloWorld { public static void main(String[] args) { //System.out.println("Hello java"); Scanner s = new Scanner(System.in); System.out.println("请输入一个数字"); int num = s.nextInt(); int sum = 0 ; while(num转载 2020-08-25 09:13:31 · 1662 阅读 · 0 评论 -
【JAVA】在线输入输出练习
参考:【小技巧】【牛客网】【JAVA】在线输入输出练习转载 2020-08-24 17:24:38 · 435 阅读 · 0 评论 -
链表14:删除链表中所有指定值结点问题
问题:现在有一个单链表。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉。给定一个单链表的头结点head,同时给定一个值val,请返回清除后的链表的头结点,保证链表中有不等于该值的其它值。请保证其他元素的相对顺序。测试样例:{1,2,3,4,3,2,1},2{1,3,4,3,1}思路:题目中已经保证了链表中一定有不等于val的其他值,因此删除后的链表不为null。所谓删除结点pcur,需要保存pcur和前面的结点ppre,为了清楚还保留一个pnext(其实就是pcur.n转载 2020-08-24 10:55:55 · 320 阅读 · 0 评论 -
顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 1011 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.【剑指offer】顺时针打印矩阵 --Java实现题解1. 分析刷 LeetCode 看到的大神题解,感觉容易理解且好写简单来说,就是不断地收缩矩阵的边界定义四个变量代表范围,up、down、left、right向右走存入.转载 2020-08-21 21:31:57 · 98 阅读 · 0 评论 -
关于ListNode的报错问题(无现成类可以使用)
关于ListNode报错之前在刷leetcode的时候,遇到ListNode的类就编译报错,无法导入合适的类库。导致这类题一直没有着手往下做。这次通过查阅其他大佬的代码构建终于解决此问题。下面上代码。public class ListNode{ int val; ListNode next; public ListNode(int x){ val=x; } }在使用ListNode进行编码时,可以引入上面这个转载 2020-08-12 09:08:11 · 5697 阅读 · 2 评论 -
链表ListNode详细解释
ListNode刷LeetCode碰到一个简单链表题,题目已经定义了链表节点ListNode,作者很菜,好多忘了,把ListNode又查了一下struct ListNode { int val; //定义val变量值,存储节点值 struct ListNode *next; //定义next指针,指向下一个节点,维持节点连接 }在节点ListNode定义中,定义为节点为结构变量。节点存储了两个变量:value 和 next。value 是这个节点的值,n转载 2020-08-12 08:58:24 · 5033 阅读 · 1 评论 -
java 数组转字符串 字符串转数组
字符串转数组使用Java split() 方法split() 方法根据匹配给定的正则表达式来拆分字符串。注意: . 、 | 和 * 等转义字符,必须得加 \。多个分隔符,可以用 | 作为连字符。// 字符串转数组 java.lang.StringString str = "0,1,2,3,4,5";String[] arr = str.split(","); // 用,分割System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, .转载 2020-08-08 21:11:15 · 190 阅读 · 0 评论 -
java语言输出小数点后保留一位小数
给定两个整数相除,要求输出结果保留一位小数,且计算结果一位小数位数直接保留,其他位直接舍去。比如,计算结果为:2.89 则应输出2.82.84 则应输出2.8也就是不按照四舍五入的标准输出。代码如下:int a;int b;//将计算结果转化为double类型的,只需乘以1.0即可double result = a*1.0/b;//减去0.05后按照四舍五入的标准输出System.out.println(String.format("%.1f",result-0.05));总结原创 2020-08-08 20:58:56 · 16685 阅读 · 0 评论 -
动态规划之求拼成给定数的硬币最小数
题目:给定一堆固定面值的硬币,比如2,5,7,求拼成指定数值所花费的最小硬币数,比如给定27,最小硬币数应为5,硬币分别为:5,5,5,5,7。这里只用到了一个7,如果自己枚举,可能会先尽可能的用7,那么硬币为:7,7,7,2,2,2,这里就用到了6枚硬币,不是最小数量。分析:设ak代表最后一枚硬币面值,则ak只可能是2,5,7,本题的最后一步为当 前k-1枚硬币拼法确定的情况下,加上最后一枚硬币ak的面值即可。设f(x)=最小用多少枚硬币拼出x,当ak=7时,f(27)=f(27-7)+1当ak=原创 2020-08-07 10:43:25 · 394 阅读 · 0 评论 -
[编程题]最小唯一前缀
给定一组个字符串,为每个字符串找出能够唯一识别该字符串的最小前缀。输入描述:第一行输入一个整数 n 表示字符串个数 后面n行,每行一个字符串,一共n串互不相同的字符串。(2 <= n <=100,字符串长度不超过100)输出描述:输出n行,每行一个字符串,依次是每个字符串的最小可唯一识别前缀链接:https://www.nowcoder.com/questionTerminal/ebcf8391390543bfbdd018af60d0c218?answerType=1&转载 2020-08-06 17:06:38 · 523 阅读 · 0 评论 -
给定一个字符串,计算这个字符串中有多少个回文子串
用例:输入一个字符串S 例如“aabcb”符合条件的字符串有"a",“a”,“aa”,“b”,“c”,“b”,“bcb” 所以答案:7思路:先筛选首位相同字母的字符串,如aa,bcb。筛选出来后,再对筛选出来的字符串判断,依次比较前后对应两个字符是否相同,相同继续判断,不相同结束当前字符串的判断。一直比较到最后剩下两种情况:1、只剩一个字符 2、只剩两个字符 只剩一个字符直接计数加一,只剩两个字符如果还相等,计数加一。import java.util.Scanner;public class Ma转载 2020-08-06 15:12:55 · 1782 阅读 · 0 评论