Javase-8.數組的練習

1.查找數組中指定元素(二分查找)

以升序數組為例, 二分查找的思路是先取中間位置的元素, 然后使用待查找元素與數組中間元素進行比較:
如果相等,即找到了返回該元素在數組中的下標
如果小于,以類似方式到數組左半側查找
如果大于,以類似方式到數組右半側查找
public static void main(String[] args) {int[] array = {2,4,1,23,65,34,89,76,32};Arrays.sort(array);//排完升序:1,2,4,23,32,34,65,76,89
//Arrays.sort();這個工具可以順序打亂的數組排成正序System.out.println(binarySearch(array, 89));
}public static int binarySearch(int[] array,int key) {int left = 0;int right = array.length - 1;int mid = array.length / 2;while(left <= right) {if(key > array[mid]) {left = mid + 1;mid = (left + right) / 2;}else if(key < array[mid]) {right = mid - 1;mid = (left + right) / 2;}else{return mid;}}return -1;
}

2.數組排序(冒泡排序)

算法思路
假設排升序:
1. 將數組中相鄰元素從前往后依次進行比較,如果前一個元素比后一個元素大,則交換,一趟下來后最大元素就在數組的末尾
2. 依次進行上述過程,直到數組中所有的元素都排列好
public static void main(String[] args) {int[] array = {3,5,1,30,10};bubble(array);System.out.println(Arrays.toString(array));
}public static void bubble(int[] array) {for (int i = 0; i < array.length; i++) {for (int j = 0; j < array.length-1; j++) {if(array[j] > array[j+1]) {int tmp = array[j];array[j] = array[j+1];array[j+1] = tmp;}}}
}

上述代碼已能成功實現數組的排序,但仍能進一步優化,如下圖,可以發現當i = 1時,j只需從j = 0比較到j = 2(array.length - 1 - i),因為在 i = 0的排完序之后, 最后一個元素已經有序了, 無需再進行比較排序. 下圖所示過程不完整,可以自行補充完整,到時就一目了然了。 如下圖, 當 i = 1時, i = 1這一趟排完序之后發現 所有元素已經排好升序了, 那也就是說在冒泡排序過程中, 存在一種可能,就是某一趟排序就已經把所有元素排好了無需再進行后續的排序,?我們其實可以定義一個 flg 來標記這種情況,可能某一趟就把順序排好直接跳出循環,提高效率.

于是有了如下優化過的代碼:

public static void bubble(int[] array) {for (int i = 0; i < array.length; i++) {boolean flg = false;//排序前將flg賦值為falsefor (int j = 0; j < array.length-1-i; j++) {if(array[j] > array[j+1]) {int tmp = array[j];array[j] = array[j+1];array[j+1] = tmp;flg = true;//有發生交換就給flg賦為true,說明順序還沒排好}}if(flg == false) {break;}}
}

3.數組逆序

給定一個數組, 將里面的元素逆序排列.
思路:
設定兩個下標, 分別指向第一個元素和最后一個元素. 交換兩個位置的元素.
然后讓前一個下標自增, 后一個下標自減, 循環繼續即可.
代碼示例
public static void main(String[] args) {int[] array = {1,2,3,4,5};reverse(array);System.out.println(Arrays.toString(array));
}public static void reverse(int[] array) {int left = 0;int right = array.length - 1;while(left < right) {int tmp = array[left];array[left] = array[right];array[right] = tmp;left++;right--;}
}

4.奇數位于偶數之前

調整數組順序使得奇數位于偶數之前。調整之后,不關心大小順序。

如數組:[1,2,3,4,5,6]

調整后可能是:[1, 5, 3, 4, 2, 6]

本題可以使用2個下標,一個從0下標開始,一個從最后一個下標開始。

public static void main(String[] args) {int[] array = {1,2,3,4,5};func(array);System.out.println(Arrays.toString(array));
}public static void func(int[] array) {int i = 0;int j = array.length-1;while(i < j) {while(i < j && array[i] % 2 != 0) {i++;}while(i < j && array[j] % 2 != 1) {j--;}int tmp = array[i];array[i] = array[j];array[j] = tmp;}
}

5.兩數之和

給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 target?的那 兩個 整數,并返回它們的數組下標。

你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素在答案里不能重復出現。

你可以按任意順序返回答案。

示例 1:

輸入:nums = [2,7,11,15], target = 9

輸出:[0,1]

解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1]

public static void main(String[] args) {int[] array = {2,7,11,15};int[] array1 = func(array,9);System.out.println(Arrays.toString(array1));
}public static int[] func(int[] array,int key) {for (int i = 0; i < array.length-1; i++) {for (int j = i+1; j <array.length; j++) {if(array[i] + array[j] == key) {int[] arr = {i,j};return arr;}}}return new int[]{-1,-1};
}

6.給定一個非空整數數組,除了某個元素只出現一次以外,其余每個元素均出現兩次。找出那個只出現了一次的元素。

注意:

1、n ^ n = 0;即兩個相同的數字異或是0

2、0 ^ n = n;即0和任何數字進行異或,結果就是那個任何數字。

public static void main(String[] args) {int[] array = {1,3,3,1,4,8,4};int ret = func(array);System.out.println(ret);
}public static int func(int[] array) {int ret = array[0];for (int i = 1; i < array.length; i++) {ret ^= array[i];}return ret;
}

7.存在連續三個奇數的數組

給你一個整數數組?arr,請你判斷數組中是否存在連續三個元素都是奇數的情況:如果存在,請返回?true?;否則,返回?false?。

示例 1:

輸入:arr = [2,6,4,1]

輸出:false

解釋:不存在連續三個元素都是奇數的情況。

示例 2:

輸入:arr = [1,2,34,3,4,5,7,23,12]

輸出:true

解釋:存在連續三個元素都是奇數的情況,即 [5,7,23] 。

思路:數字是連續出現的,所以我們只需要定義一個計數器,如果連續出現的次數超過3,則返回true。

public static void main(String[] args) {int[] arr = {2,6,4,1};boolean ret = func(arr);System.out.println(ret);int[] arr1 = {1,2,34,3,4,5,7,23,12};boolean ret1 = func(arr1);System.out.println(ret1);
}public static boolean func(int[] array) {int count = 0;for (int i = 0; i < array.length; i++) {if(array[i] % 2 != 0) {count++;}if(count == 3) {return true;}}return false;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91323.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91323.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91323.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

H3CNE綜合實驗之機器人

H3CNE綜合實驗之機器人 實驗拓撲圖實驗需求 1.按照圖示配置 IP 地址 2.SW1 和 SW2 之間的直連鏈路配置鏈路聚合 3.公司內部業務網段為 Vlan10 和 Vlan20;Vlan10 是市場部&#xff0c;Vlan20 是技術部&#xff0c;要求對 Vlan 進行命名以識別; ? PC8 屬于 Vlan10&#xff0c…

2025/7/15——java學習總結

Java IO、Stream、異常與 File 全體系總結&#xff1a;從基礎到進階的完整突破一、核心知識深耕&#xff1a;四大模塊的體系與底層邏輯&#xff08;一&#xff09;IO 流&#xff1a;數據傳輸的基礎通道體系架構與核心分類按流向&#xff1a;輸入流&#xff08;InputStream/Read…

【軌物方案】當補貼退潮,光伏電站如何回歸價值本質?

中國光伏產業正站在一個歷史性的拐點。過去&#xff0c;國家補貼的“黃金時代”催生了裝機量的爆發式增長&#xff0c;許多電站在建設初期將重心放在了快速并網&#xff0c;卻忽視了貫穿2-30年生命周期的運維規劃。如今&#xff0c;補貼浪潮逐漸退去&#xff0c;各大企業開始從…

群暉Nas - Docker(ContainerManager)上安裝SVN Server和庫權限設置問題

上次安裝了Gitlab&#xff0c;可以參考這篇&#xff08;群暉Nas - Docker&#xff08;ContainerManager&#xff09;上安裝GitLab&#xff09;&#xff0c;今天來搞SVN服務器&#xff0c;廢話不多說。 下載鏡像 還是先下載鏡像&#xff08;garethflowers/svn-server&#xff…

前端打包自動壓縮為zip--archiver

安裝依賴 pnpm add archiver types/archiver/vitePlugins/autoBuildZip.ts import { Plugin } from vite; import archiver from archiver; import fs from fs;const compressFolder (folderPath: string, outputFilePath: string) > {const output fs.createWriteStream(…

React響應式組件范式:從類組件到Hooks

?引言 在UI開發中&#xff0c;"狀態變化自動觸發UI更新"的響應式機制是構建動態界面的核心。React通過獨特的??單向數據流??和??虛擬DOM&#xff08;Virtual DOM&#xff09;?? 實現這一目標&#xff0c;但類組件&#xff08;Class Components&#xff09;…

com2tcp工具

com2tcp 是 com0com 套件中的一個實用工具&#xff0c;用于將本地串口&#xff08;COM&#xff09;數據轉發到 TCP/IP 網絡&#xff0c;或者將 TCP/IP 數據轉發到本地串口&#xff0c;實現串口數據的網絡透傳。 1. com2tcp 基本用法 &#xff08;1&#xff09;安裝 com0com 從…

MySQL實操:將Word表格數據導入MySQL表

文章目錄 1. 提出任務1.1 Word表格數據1.2 查看商品空表1.3 任務要求2. 完成任務2.1 借助AI2.1.1 利用AI生成SQL語句2.1.2 在Navicat里執行查詢2.1.3 查看商品表記錄2.2 借助Excel2.2.1 將Word表格數據復制到Excel2.2.2 新建商品表2.2.3 利用導入向導將電子表格數據導入商品表2…

什么是Podman?能否替代Docker?Podman快速入門

什么是PodmanPodman&#xff08;POD Manager&#xff09;是一個開源的無守護進程&#xff08;daemonless&#xff09;容器引擎&#xff0c;用于管理容器、容器鏡像、容器卷和網絡。它兼容 OCI 標準&#xff0c;可以運行 Docker 鏡像&#xff0c;并且設計上與 Docker CLI 命令高…

開通保存圖片權限

直接粘貼就可以用 上干貨 可以的話希望點個start/* 小程序特有相關 */mp-weixin: {appid: VITE_WX_APPID,setting: {urlCheck: false,minified : true //是否壓縮js},usingComponents: true,"lazyCodeLoading": "requiredComponents", //按需注入"pe…

【趙渝強老師】大數據交換引擎Sqoop

Sqoop是SQL To Hadoop的簡稱&#xff0c;它是一款開源的工具&#xff0c;主要用于在Hadoop&#xff08;Hive&#xff09;與傳統的數據庫&#xff08;Oracle、MySQL等&#xff09;間進行數據的傳遞。通過使用Sqoop可以將一個關系型數據庫中的數據導進到Hadoop的HDFS中&#xff0…

C++進階-map的應用

目錄 1.預備知識 2.map的補充知識 2.1map的插入方式 2.2訪問鍵和值 2.3map::operator[]的補充 2.4另外一些map的成員函數的補充 3.map的應用實踐-力扣刷題-前k個高頻單詞 3.1解法1 3.2解法2 3.3解法3 4.map的應用實踐-力扣刷題-隨機鏈表的復制 4.1C語言解法 4.2C解…

【三維重建工具】NeRFStudio、3D GaussianSplatting、Colmap安裝與使用指南

目錄 一、NeRFStudio安裝1.安裝&#xff08;ubuntu系統&#xff09;2.安裝&#xff08;windows系統&#xff09; 二、安裝tinycudann三、Colmap安裝與使用1. 安裝依賴2. 安裝colmap3.使用colmap3.1 可視化界面使用3.2 Nerfstudio命令行調用Colmap3.3 colmap結果不準時的修復3.4…

Mybatis05-動態sql

一、應用場景MyBatis 的 動態 SQL 是指根據不同的條件動態拼接生成 SQL 語句的能力。它的最大優勢是&#xff1a;避免寫多個 XML 映射語句、避免 SQL 冗余、提升代碼復用性和可維護性。示例1&#xff1a;用戶可以通過勾選框&#xff0c;勾選不同的數據進行批量刪除&#xff0c;…

VSCODE 選中多行 需要同時按住alt鍵才可以

在 VS Code 中&#xff0c;如果你發現 必須按住 Alt 鍵才能選中多行&#xff08;即“列選擇”或“塊選擇”模式&#xff09;&#xff0c;而直接拖動鼠標無法多選&#xff0c;可能是由于以下原因導致的&#xff1a;1. 檢查是否啟用了“列選擇模式”VS Code 默認情況下&#xff1…

2025前端面試真題以及答案-不斷整理中,問題來源于牛客真題

一、 項目內存泄露react與vue的渲染機制有哪些不同react fiber架構vue2與3&#xff0c;為什么用proxy代替defineproperty性能優化有哪些三欄布局實現方式重排與重繪一個對話聊天框如何減少重排&#xff08;我回答的是絕對定位&#xff0c;將聊天框定位在下面&#xff0c;類似于…

雷軍的 IP 革命:人格化力量如何重塑商業規則|創客匠人

小米 YU7 發布會 3 分鐘售罄 20 萬臺的奇跡&#xff0c;撕開了一個時代真相&#xff1a;當商業競爭進入深水區&#xff0c;決定勝負的不再是產品參數&#xff0c;而是創始人 IP 的人格穿透力。雷軍僅憑個人影響力撬動數十億級交易&#xff0c;這絕非偶然&#xff0c;而是人格化…

SpringBoot3:應對C10K并發挑戰的優化指南

嘿&#xff0c;哥們&#xff01;還在為服務的并發量上不去而頭疼嗎&#xff1f;用戶量一上來&#xff0c;CPU、內存就告急&#xff0c;接口響應慢得像蝸牛&#xff1f;別慌&#xff0c;今天我們就來盤一盤&#xff0c;怎么用最新的Spring Boot 3&#xff0c;把服務性能調教到極…

響應式編程入門教程第三節:ReactiveCommand 與 UI 交互

響應式編程入門教程第一節&#xff1a;揭秘 UniRx 核心 - ReactiveProperty - 讓你的數據動起來&#xff01; 響應式編程入門教程第二節&#xff1a;構建 ObservableProperty&#xff1c;T&#xff1e; — 封裝 ReactiveProperty 的高級用法 響應式編程入門教程第三節&#x…

500+技術棧覆蓋:Web測試平臺TestComplete的對象識別技術解析

在用戶界面&#xff08;UI&#xff09;測試領域&#xff0c;傳統的測試工具往往依賴于XPath或CSS選擇器來定位頁面元素。然而&#xff0c;在面對動態變化的界面、多語言支持或是跨越多種技術框架的應用時&#xff0c;這些傳統方法常導致腳本失效&#xff0c;增加了維護成本。 …