日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

经典笔试编程题--Java实现

發布時間:2023/12/3 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 经典笔试编程题--Java实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自??經典筆試編程題--Java實現

1.輸入一個正數n,輸出所有和為n的連續正數序列。?
分析:設定兩個指針,min指向和為n的連續正數序列的最小值,max指向和為n的連續正數序列最大值。sum表示真正的和。?
初始情況下,min、max和sum 都指向1.?
當sum小于n時,max++;?
當sum大于n時,min++;?
當sum等于n時,輸出整個序列。

public class a {public static void getAns(int n) {int min = 1;int sum = 1;int max = 1;while(min <= n/2+1) {if(sum == n) {for(int k = min; k<=max; k++) { System.out.println(k+"");}System.out.println();sum = sum - min;min ++;max ++;sum = sum+max;}if(sum > n) {sum = sum - min;min ++;} else {max ++;sum = sum + max;}}}public static void main(String[] args) {getAns(15);}}

2.給定一個排好序的鏈表,刪除鏈表中重復的結點,返回鏈表頭指針。?
分析:(1)鏈表中重復的結點不需要保留一個,要全部刪除。?
(2)因為相同的結點全部要刪除,所以我們設定三個指針,node指向當前節點,prev指向前驅,還有一個指向后繼結點。一旦遇到node和后繼結點相等,就node++,知道沒有重復的再移動prev.?
(3)注意:頭結點也可能有重復,所以也可能被刪除,所以需要定義一個root指向頭結點。

public class a {// 結點定義,包括當前結點的值和next指向private static class ListNode {private int val;private ListNode next;public ListNode() {}public ListNode(int val) {this.val = val;}public String toString() {return val + "";}}// 刪除節點的函數public static ListNode delete(ListNode head) {if (head == null)return null;if (head.next == null)return head;// 定義一個臨時的頭結點,因為頭結點也可能被刪除ListNode root = new ListNode();root.next = head;ListNode prev = root;ListNode node = head;while (node != null && node.next != null) {if (node.val == node.next.val) {//若有連續相同的結點,則node要一直++while (node.next != null && node.next.val == node.val)node = node.next;prev.next = node.next;} else {prev.next = node;prev = prev.next;}node = node.next;}return root.next;}//打印出來刪除后的結果private static void print(ListNode head) {while (head != null) {System.out.print(head + "->");head = head.next;}System.out.println("null");}public static void main(String[] args) {// 按照結點的定義新建一個鏈表ListNode n1 = new ListNode(1);ListNode n2 = new ListNode(1);ListNode n3 = new ListNode(2);ListNode n4 = new ListNode(2);ListNode n5 = new ListNode(2);ListNode n6 = new ListNode(3);ListNode n7 = new ListNode(5);n1.next = n2;n2.next = n3;n3.next = n4;n4.next = n5;n5.next = n6;n6.next = n7;n7.next = null;//調用delete函數,傳入n1的值,當成頭結點ListNode result = delete(n1);print(result);} }

3.對于一個有序數組,我們通常采用二分查找的方式來定位某一元素,請編寫二分查找的算法,在數組中查找指定元素。?
給定一個整數數組A及它的大小n,同時給定要查找的元素val,請返回它在數組中的位置(從0開始),若不存在該元素,返回-1。若該元素出現多次,請返回第一次出現的位置。?
分析:重點在返回第一次出現的位置。

public class c {public static int getPos(int[] A, int n, int val) {int low = 0, high = n - 1, mid;if (n == 0 || A == null)return -1;while (low <= high) {mid = (low + high) / 2;//當第一次找出相等的位置后需要繼續向前查找,最后返回第一次出現的位置if (val == A[mid]) {for(int j = mid; j >= 0; j--) {if(A[j] != A[mid]) {mid = j + 1;break;}else if(A[j] == A[mid]) {mid = j;continue;}}return mid;} else if (val < A[mid])high = mid - 1;elselow = mid + 1;}return -1;}public static void main(String[] args) {int A[] = { 4, 4, 5, 5, 5, 5 };int val = 4;int n = A.length;int result = getPos(A, n, val);System.out.println(result);} }

4.對于一個字符串,請設計一個高效算法,找到第一次重復出現的字符。?
給定一個字符串(不一定全為字母)A及它的長度n。請返回第一個重復出現的字符。保證字符串中有重復字符,字符串的長度小于等于500。

方法1:這是前輩給出的算法,利用HashSet的特性,即不允許重復放入元素,所以一旦檢測到重復元素就返回false。對于本道題來說,這種方法簡潔且容易理解,能高效實現功能,但是這種方法普適性較差。

import java.util.HashSet;public class g {public static char findFirstRepeat(String A, int n) {HashSet hs=new HashSet();int length=A.length();//利用toCharArray()將String類型轉化為char類型char[] a=A.toCharArray();for(int i=0;i < length;i++){boolean b=hs.add(a[i]);//通過往hashset塞值(hashset不準有重復元素),判斷當前一段數據中是否有重復元素,一但有,立刻返回if(b==false){return a[i];}}return'0';}public static void main(String[] args) {String A = "qywyer23tdd";int n = A.length();char b = findFirstRepeat(A, n);System.out.println(b);} }

方法2:利用了哈希存儲,將給定字符串以鍵值對形式存儲在哈希Map中,key就是每一個字符,value就是每個字符出現的次數。存好后再按順序遍歷Map,找出第一次出現次數不為1的即可。返回。?
注意:基于hash的存儲是很高效的一種方式,存儲鍵值對方便查找,可以根據key查找value,或者根據value查找key,或者查找特殊的字符等。

延伸:返回第一個只出現一次的字符,返回最后一個出現次數不為1的字符,返回所有出現次數為1的字符或者出現次數不為1的字符,返回給定出現次數的字符等等。

import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry;public class g {private static void findFirstRepeat(String A, int n) {int sum = 1;//新插入的key-value給value賦初始值都為1//用LinkedHashMap來存儲鍵值對//HashMap插入和輸出順序不一樣//但LinkedHashMap插入和輸出順序相同,即先存的先顯示,也就是尾插 //HashSet要求不能存重復元素,但HashMap和LinkedHashMap可以存重復元素。Map<String, Integer> hashMap = new LinkedHashMap<String, Integer>();for (int i = 0; i < n; i++) {//將main中傳過來的String類型參數一個字符一個字符的轉化為char類型,方便處理。char item = A.charAt(i); //再將每一個char類型的字符轉化為String類型。這一步操作和上一步操作作用是分離出每一個字符。String item2 = String.valueOf(item);String key = item2;// 判斷是否包含指定的鍵值boolean contains = hashMap.containsKey(key); if (contains) { // 如果條件為真sum++;hashMap.put(item2, sum);// 輸出信息 } else {sum = 1;hashMap.put(item2, sum); }} //輸出存進哈希表中的所有鍵值對System.out.println(hashMap);//以下是通過給定的value值反查key的過程//將所有的鍵值對存在一個entrySet中//遍歷entrySet,若找到value等于給定的value值,則將其對應key值存在keyList中。List<String> keyList = new ArrayList<String>(); for (Entry<String, Integer> e : hashMap.entrySet()) { if (e.getValue().equals(2)) { keyList.add(e.getKey()); } } //最后遍歷keyList,輸出第一次出現的key即可。for (String i : keyList) { System.out.println(i);break;} }public static void main(String[] args) {String A = "qywyer2333333333tdd";int n = A.length();findFirstRepeat(A, n); } }

關于類型轉化問題:

(1)String---------》char / char[ ] String str = "ab"; char str1 = str.charAt(0); //得到a char str2 = str.charAt(1); //得到bchar[ ] str3 = str.toCharArray(); System.out.println (Arrays.toString(str3));(2)char / char[]-----------》String char m = 'a'; String str = String.valueOf(m); String str2 = m + " ";char[] m = {'a','b'}; String str3 = String.copyValueOf(m); String str4 = new String(m);(3)int -----------》 String int i; String s = String.valueOf(i); String s = Integer.toString(i); String s = "" + i;(4)String ----------》 intint i = Integer.parseInt([String]); i = Integer.parseInt([String],[int radix]); int i = Integer.valueOf(my_str).intValue();

關于哈希存儲的處理方案(本人親試!) :

(1)根據key來查找,判斷是否包含給定的key。boolean contains = hashMap.containsKey(key); if (contains) { // 如果條件為真System.out.println("存在"+key);} else {System.out.println("不存在" + key);} (2)根據value來查找,判斷是否包含給定的value.boolean contains = hashMap.containsValue(Value); if (contains) { // 如果條件為真System.out.println("存在"+value);} else {System.out.println("不存在" +value);} (3)利用keySet遍歷所有的key值。for (Object key : hashMap.keySet()) { System.out.println("key= " + key + " value " + hashMap.get(key));} 牛課網經典例題

1.合并兩個排序的鏈表?
思路:定義兩個指針,一個指向list1,一個指向List2,定義一個新鏈表,List1和list2中哪個小就復制到新鏈表中。注意判斷list1和list2是否為空!!!?
本題是利用遞歸來實現的。

/* public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;} }*/ public class Solution {public ListNode Merge(ListNode list1,ListNode list2) {if(list1 == null) {return list2;} if(list2 == null) {return list1;} ListNode s = null;if(list1.val < list2.val) {s = list1;s.next = Merge(list1.next, list2);} else if(list1.val >= list2.val) {s = list2;s.next = Merge(list1, list2.next);}return s;} }

處理二進制問題:?
兩個int32整數m和n的二進制表達,有多少個位(bit)不同么??
(1)m^n后,將結果賦值給一個String類型的變量,循環遍歷變量的每一位,看是否等于1.?
(2)m^n后,將二進制結果的最后一位&1,然后將二進制右移。

public class Solution {/*** 獲得兩個整形二進制表達位數不同的數量* * @param m 整數m* @param n 整數n* @return 整型*/public int countBitDiff(int m, int n) {int x = m^n;int y = 0;while(x>0) {if((x&1) == 1) {y+=1;}x= x>>1;}return y;} }

水仙花問題:水仙花,即給定一個三位數,每一位的數字立方加起來等于這個數本身。?
解析:

import java.util.Scanner; public class Solution {public static void main(String[] args) {Scanner san = new Scanner(System.in);//從鍵盤輸入最小值int min = san.nextInt();//從鍵盤輸入最大值int max = san.nextInt();for(int mid = min; mid < max; mid++) {int a = mid/100;int b = mid%10;int c = mid%100/10;int sum = a*a*a + b*b*b + c*c*c;if(sum == mid) {System.out.println(mid);}}} }

題目:從鍵盤輸入m和n,定義n是第一個數,之后的每個數都是前一個的平方根?
,一共有m個數,計算總和。

import java.lang.Math; import java.util.Scanner;public class a {public static void main(String[] args) {//求平方根 Scanner scan = new Scanner(System.in);float n = scan.nextFloat();int m = scan.nextInt();float sum = n;for(int i=2;i<=m;i++) {sum += Math.sqrt(n);n = (float) Math.sqrt(n);}System.out.println("sum=" +sum);} }

題目:Java的一維數組在不知道長度的情況下怎樣聲明?

(1) 不知道長度,所以不能直接聲明大小 import java.util.ArrayList; import java.util.List; import java.util.Scanner;public class a {public static void main(String[] args) {//用ArrayList來實現添加數據List<Integer> list = new ArrayList<Integer>(); Scanner scanner = new Scanner(System.in);System.out.println("請輸入數組");//給定一個while循環//保證輸入一串數字,直接接收,并添加到list中,當輸入0時結束輸入while(true) {int a = scanner.nextInt();if(a==0) {break;} else {list.add(a) ;}}int size = list.size();//將list轉成int型數組Integer[] array = (Integer[])list.toArray(new Integer[size]); //輸出int型數組。for(int i=0;i<array.length;i++){ System.out.print(array[i]+" "); } } }

這樣就得到一個從鍵盤輸入的Int型數組,接下來就可以對數組進行各種操作。?
符合一般情況下的需要多組測試用例的情況。

題目:給定一個正整數,編寫程序計算有多少對質數的和等于這個輸入的正整數,并輸出結果,輸出值小于1000.?
測試用例:?
輸入:10?
輸出:2 ((3,7) 和(5,5))。

import java.util.Scanner;public class cc {private static int cout(int number) {int count = 0;for (int i = 2; i < number; i++) {for (int j = 2; j <= number / 2; j++) {if (isPrime(i) && isPrime(j) && (i + j) == number) {count++;}}}return count;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("請輸入給定的數字");int a = scanner.nextInt();int count = cout(a);System.out.println("count=" + count);}public static boolean isPrime(int number) {if (number < 2) {return false;}for (int i = 2; i < number; i++) {if (number % i == 0) {return false;} else {continue;}}return true;} }

2 . 題目:二分查找,在左區間輸出0,右區間輸出1.?
逐漸逼近,保留6位。?
注意特殊輸入:?
(1) key值小于輸入臨界最小值或者大于臨界最大值。?
(2) 臨界最小值大于臨界最大值。?
(3) 兩個臨界值都為0,輸出0。

import java.util.Scanner;public class cc {public static int comp(int key, int num) {if (key >= num) {return 1;} else {return 0;}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("請輸入最小臨界值");int a = scanner.nextInt();System.out.println("請輸入最大臨界值");int b = scanner.nextInt();System.out.println("請輸入需要比較的值");int key = scanner.nextInt();if (key < a || key > b) {System.out.println("error");} else if (key == 0 && a == 0 && b == 0) {System.out.println("error");} else {while (a <= b) {for (int i = 0; i < 6; i++) {int num;num = (a + b) / 2;System.out.println("num=" + num);int s = comp(key, num);if (s == 0) {b = num;System.out.println("0");} else {a = num;System.out.println("1");}}break;}}} }

題目:鏡像字符串,給定兩個字符串,判斷第二個是否為第一個的鏡像字符串,是返回yes,否返回no.

import java.util.Scanner;public class b {public static Boolean count(String str1, String str2) {int p1 = 0;int p2 = 0;char[] st1 = str1.toCharArray();char[] st2 = str2.toCharArray();for (int i = 0; i < st1.length; i++) {if (st1[i] == st2[0]) {p1 = i;}}while (p1 < st1.length && p2 < st2.length) {if (st1[p1] == st2[p2]) {if (p1 == st1.length) {p1 = -1;}p1++;p2++;continue;} else {return false;}}return true;}public static void main(String[] args) throws Exception {Scanner scanner = new Scanner(System.in);System.out.println("請輸入字符串");String str1 = scanner.next();String str2 = scanner.next();if(str1.length()-str2.length()!=0) {System.out.println("no");return;}if (str1 == null || str1.length() <= 0 || str2 == null|| str2.length() <= 0) {System.out.println("error");}Boolean num = count(str1, str2);if (num.equals(true)) {System.out.println("yes");} else {System.out.println("no");}} }

總結

以上是生活随笔為你收集整理的经典笔试编程题--Java实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久91久久 | 久久国产精品波多野结衣 | 黄色av免费看 | 亚洲视频中文字幕在线观看 | 最好看的电影2019中文字幕 | 成人亚洲一区 | 国产色在线 | 91精品视频国产 | 久久久久久91亚洲精品中文字幕 | 在线观看免费黄网站 | 中文在线观看免费视频 | 双性人bbww欧美双性 | 熟女性饥渴一区二区三区 | 手机av网站 | 成人免费视频国产免费麻豆 | 看一级黄色大片 | 正在播放国产一区 | 午夜在线影院 | 国产欧美日韩综合精品 | 这里只有精品在线观看 | 青青青手机在线视频 | 久久国产精品波多野结衣av | 嫩草亚洲 | 久久最新视频 | 一卡二卡国产 | 亚洲精品v天堂中文字幕 | 国产毛片aaa | 国产免费又粗又猛又爽 | 无码人妻丰满熟妇区毛片18 | 91av久久 | 伊人色在线 | 香蕉视频在线观看网站 | 国产一区美女 | 国产精品一区二区三区免费视频 | 少妇免费直播 | 中文字幕在线资源 | 亚洲女同一区二区 | 97久久国产精品 | 99无码熟妇丰满人妻啪啪 | 亚洲欧美一级 | 亚洲AV无码成人国产精品色 | 午夜视频在线观看视频 | 亚洲男人网站 | 制服中文字幕 | 精品久久久噜噜噜久久久 | 免费网站观看www在线观看 | 一区久久| 日韩欧美国产综合 | 欧美丝袜脚交 | 啪啪短视频 | 女人高潮娇喘声mp3 乱色视频 | 精品人妻一区二区三区日产 | 少妇无内裤下蹲露大唇视频 | 欧美成人久久 | 欧美一级视频免费 | 国产三区在线视频 | 无码专区久久综合久中文字幕 | 久久影院午夜 | 中文字幕激情 | 蜜桃久久av | 91狠狠干 | 一级黄色片看看 | 懂色av一区二区三区四区五区 | av成人精品| 青草精品在线 | 亚洲第一黄色片 | 九九爱精品视频 | 久草青青| 国产一区二区久久久 | 熟睡人妻被讨厌的公侵犯 | 天堂少妇| 免费看91 | 毛片av免费 | 中文字幕――色哟哟 | 欧美一级一区二区 | 中文字幕在线观看二区 | 亚洲女人视频 | hs视频在线观看 | 欧美日韩在线免费播放 | av网天堂 | 四虎永久在线精品免费网址 | 欧美国产一区二区 | 第一章豪妇荡乳黄淑珍 | 最好看十大无码av | 国产成人无码精品久在线观看 | 欧美在线色 | 欧美一区不卡 | 色拍拍视频| 欧美性aaa | 免费在线播放毛片 | 日韩wwww| 国产乱码精品一区二区 | 国产精品丝袜在线观看 | 日本黄色一区二区三区 | 岛国av不卡 | 成人在线播放av | 一级片视频网站 | 中文字幕亚洲一区二区三区五十路 | 成年人在线观看视频网站 |